Przeglądaj źródła

video: driver: queue persist buffer as session buffer

-queue persist buffer as session buffer at the start
 of the session for decoder
-fix hfi buffer packet parsing when payload is none.

Change-Id: I5da2472d00bf85dd328bbdfcbd35074a46522d25
Signed-off-by: Darshana Patil <[email protected]>
Darshana Patil 4 lat temu
rodzic
commit
40a39d7455

+ 3 - 4
driver/vidc/src/hfi_packet.c

@@ -68,15 +68,14 @@ u32 get_hfi_port_from_buffer_type(struct msm_vidc_inst *inst,
 		case MSM_VIDC_BUF_LINE:
 			hfi_port = HFI_PORT_BITSTREAM;
 			break;
-		case MSM_VIDC_BUF_PERSIST:
-			/* TODO: change to HFI_PORT_NONE */
-			hfi_port = HFI_PORT_BITSTREAM | HFI_PORT_RAW;
-			break;
 		case MSM_VIDC_BUF_OUTPUT:
 		case MSM_VIDC_BUF_OUTPUT_META:
 		case MSM_VIDC_BUF_DPB:
 			hfi_port = HFI_PORT_RAW;
 			break;
+		case MSM_VIDC_BUF_PERSIST:
+			hfi_port = HFI_PORT_NONE;
+			break;
 		default:
 			i_vpr_e(inst, "%s: invalid buffer type %d\n",
 				__func__, buffer_type);

+ 0 - 17
driver/vidc/src/msm_vdec.c

@@ -802,10 +802,6 @@ static int msm_vdec_get_input_internal_buffers(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 
-	rc = msm_vidc_get_internal_buffers(inst, MSM_VIDC_BUF_PERSIST);
-	if (rc)
-		return rc;
-
 	i_vpr_h(inst, "input internal buffer: min     size     reuse\n");
 	i_vpr_h(inst, "bin  buffer: %d      %d      %d\n",
 		inst->buffers.bin.min_count,
@@ -823,10 +819,6 @@ static int msm_vdec_get_input_internal_buffers(struct msm_vidc_inst *inst)
 		inst->buffers.line.min_count,
 		inst->buffers.line.size,
 		inst->buffers.line.reuse);
-	i_vpr_h(inst, "persist buffer: %d      %d      %d\n",
-		inst->buffers.persist.min_count,
-		inst->buffers.persist.size,
-		inst->buffers.persist.reuse);
 
 	return rc;
 }
@@ -872,9 +864,6 @@ static int msm_vdec_create_input_internal_buffers(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 	rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_LINE);
-	if (rc)
-		return rc;
-	rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_PERSIST);
 	if (rc)
 		return rc;
 
@@ -916,9 +905,6 @@ static int msm_vdec_queue_input_internal_buffers(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 	rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_LINE);
-	if (rc)
-		return rc;
-	rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_PERSIST);
 	if (rc)
 		return rc;
 
@@ -961,9 +947,6 @@ static int msm_vdec_release_input_internal_buffers(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 	rc = msm_vidc_release_internal_buffers(inst, MSM_VIDC_BUF_LINE);
-	if (rc)
-		return rc;
-	rc = msm_vidc_release_internal_buffers(inst, MSM_VIDC_BUF_PERSIST);
 	if (rc)
 		return rc;
 

+ 5 - 4
driver/vidc/src/msm_vidc_vb2.c

@@ -176,19 +176,20 @@ int msm_vidc_start_streaming(struct vb2_queue *q, unsigned int count)
 				MSM_VIDC_BUF_ARP);
 			if (rc)
 				goto error;
+			i_vpr_h(inst, "session internal buffer: min     size\n");
 			i_vpr_h(inst, "arp  buffer: %d      %d\n",
 				inst->buffers.arp.min_count,
 				inst->buffers.arp.size);
 		} else if(is_decode_session(inst)) {
-		/* TODO: move persist buf from msm_vdec_streamon_input to here
 			rc = msm_vidc_alloc_and_queue_session_internal_buffers(inst,
 				MSM_VIDC_BUF_PERSIST);
 			if (rc)
 				goto error;
-			i_vpr_h(inst, "persist  buffer: %d      %d\n",
+			i_vpr_h(inst, "session internal buffer: min     size     reuse\n");
+			i_vpr_h(inst, "persist  buffer: %d      %d      %d\n",
 				inst->buffers.persist.min_count,
-				inst->buffers.persist.size);
-		*/
+				inst->buffers.persist.size,
+				inst->buffers.persist.reuse);
 		}
 	}
 

+ 6 - 0
driver/vidc/src/venus_hfi_response.c

@@ -852,6 +852,12 @@ static int handle_session_buffer(struct msm_vidc_inst *inst,
 		return 0;
 	}
 
+	if (pkt->payload_info == HFI_PAYLOAD_NONE) {
+		i_vpr_h(inst, "%s: received hfi buffer packet without payload\n",
+			__func__);
+		return 0;
+	}
+
 	port_type = pkt->port;
 
 	buffer = (struct hfi_buffer *)((u8 *)pkt + sizeof(struct hfi_packet));