diff options
author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-06-14 12:13:03 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-06-14 12:13:03 -0700 |
commit | a76f9dd1c99e29dcb4e55b2068ec0cc550ada8df (patch) | |
tree | 465c3bec8e92506ef8ae85bd1bfa8d25944184bd /mm-video-v4l2 | |
parent | bcddd81af66b40d64979071fc577fbffaafca9e9 (diff) | |
parent | cb6623fb64f31753a2e0562383aa6048ba63508f (diff) | |
download | media-a76f9dd1c99e29dcb4e55b2068ec0cc550ada8df.tar.gz |
Merge "mm-video-v4l2: vdec: New client extradata OutputCrop" into video-userspace.lnx.3.0-dev
Diffstat (limited to 'mm-video-v4l2')
-rw-r--r-- | mm-video-v4l2/vidc/vdec/inc/omx_vdec.h | 13 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 77 |
2 files changed, 87 insertions, 3 deletions
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 03e65066..0db0e93a 100644 --- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -207,6 +207,8 @@ extern "C" { sizeof(OMX_QCOM_EXTRADATA_VQZIPSEI) + 3)&(~3)) #define OMX_USERDATA_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ + 3)&(~3)) +#define OMX_OUTPUTCROP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ + sizeof(OMX_QCOM_OUTPUT_CROP) + 3)&(~3)) /* STATUS CODES */ /* Base value for status codes */ @@ -380,6 +382,13 @@ struct vdec_sep_metadatainfo { uint32_t buffer_size; }; +struct vdec_misrinfo { + uint32_t misr_dpb_luma; + uint32_t misr_dpb_chroma; + uint32_t misr_opb_luma; + uint32_t misr_opb_chroma; +}; + struct vdec_output_frameinfo { void *bufferaddr; size_t offset; @@ -394,6 +403,7 @@ struct vdec_output_frameinfo { enum vdec_interlaced_format interlaced_format; struct vdec_aspectratioinfo aspect_ratio_info; struct vdec_sep_metadatainfo metadata_info; + struct vdec_misrinfo misrinfo[2]; }; union vdec_msgdata { @@ -497,6 +507,7 @@ struct extradata_info { OMX_CONFIG_RECTTYPE output_crop_rect; OMX_U32 output_width; OMX_U32 output_height; + OMX_QCOM_MISR_INFO misr_info[2]; }; typedef std::unordered_map <int, int> ColorSubMapping; @@ -904,6 +915,8 @@ class omx_vdec: public qc_omx_component void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user); void append_concealmb_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_concealmb, OMX_U8 *conceal_mb_data); + void append_outputcrop_extradata(OMX_OTHER_EXTRADATATYPE *extra, + struct msm_vidc_output_crop_payload *output_crop_payload); void append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra, struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload); void append_qp_extradata(OMX_OTHER_EXTRADATATYPE *extra, diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 5761a250..1e23924b 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -8488,6 +8488,8 @@ int omx_vdec::async_message_process (void *context, void* message) vdec_msg->msgdata.output_frame.framesize.bottom = omx->m_extradata_info.output_crop_rect.nHeight; vdec_msg->msgdata.output_frame.picsize.frame_width = omx->m_extradata_info.output_width; vdec_msg->msgdata.output_frame.picsize.frame_height = omx->m_extradata_info.output_height; + memcpy(vdec_msg->msgdata.output_frame.misrinfo, + omx->m_extradata_info.misr_info, sizeof(vdec_misrinfo)); } else { DEBUG_PRINT_LOW("Read FBD crop from v4l2 reserved fields"); vdec_msg->msgdata.output_frame.framesize.left = plane[0].reserved[2]; @@ -10018,6 +10020,27 @@ void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr) m_extradata_info.output_width = output_crop_payload->width; m_extradata_info.output_height = output_crop_payload->height; m_extradata_info.output_crop_updated = OMX_TRUE; + DEBUG_PRINT_HIGH("MISR0: %x %x %x %x\n", + output_crop_payload->misr_info[0].misr_dpb_luma, + output_crop_payload->misr_info[0].misr_dpb_chroma, + output_crop_payload->misr_info[0].misr_opb_luma, + output_crop_payload->misr_info[0].misr_opb_chroma); + DEBUG_PRINT_HIGH("MISR1: %x %x %x %x\n", + output_crop_payload->misr_info[1].misr_dpb_luma, + output_crop_payload->misr_info[1].misr_dpb_chroma, + output_crop_payload->misr_info[1].misr_opb_luma, + output_crop_payload->misr_info[1].misr_opb_chroma); + memcpy(m_extradata_info.misr_info, output_crop_payload->misr_info, 2 * sizeof(msm_vidc_misr_info)); + if (client_extradata & OMX_OUTPUTCROP_EXTRADATA) { + append_outputcrop_extradata(p_extra, output_crop_payload); + p_extra = (OMX_OTHER_EXTRADATATYPE *)(((OMX_U8 *)p_extra) + ALIGN(p_extra->nSize, 4)); + if (p_client_extra) { + append_outputcrop_extradata(p_client_extra, output_crop_payload); + p_client_extra = (OMX_OTHER_EXTRADATATYPE *)(((OMX_U8 *)p_client_extra) + ALIGN(p_client_extra->nSize, 4)); + } + } else { + DEBUG_PRINT_ERROR("p_extra %p p_client_extra %p client_extradata %x %x ", p_extra, p_client_extra, client_extradata, OMX_OUTPUTCROP_EXTRADATA); + } } } break; @@ -10319,14 +10342,11 @@ OMX_ERRORTYPE omx_vdec::enable_extradata(OMX_U64 requested_extradata, if (ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) { DEBUG_PRINT_HIGH("Failed to set VQZip SEI extradata"); } - client_extradata |= OMX_VQZIPSEI_EXTRADATA; - control.id = V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA; control.value = V4L2_MPEG_VIDC_EXTRADATA_FRAME_QP; if (ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) { DEBUG_PRINT_HIGH("Failed to set QP extradata"); } - client_extradata |= OMX_QP_EXTRADATA; } if (requested_extradata & OMX_OUTPUTCROP_EXTRADATA) { control.id = V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA; @@ -10539,6 +10559,45 @@ void omx_vdec::print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra) " Size: %u\n", (unsigned int)vq->nSize); DEBUG_PRINT_HIGH( "=========== End of VQZip ==========="); + } else if (extra->eType == (OMX_EXTRADATATYPE)OMX_ExtraDataOutputCropInfo) { + OMX_QCOM_OUTPUT_CROP *outputcrop_info = (OMX_QCOM_OUTPUT_CROP*)(void *)extra->data; + DEBUG_PRINT_HIGH( + "------------------ output crop ----------\n" + " left: %u \n" + " top: %u \n" + " display_width: %u \n" + " display_height: %u \n" + " width: %u \n" + " height: %u \n" + " frame_num: %u \n" + " bit_depth_y: %u \n" + " bit_depth_c: %u \n" + " top field: misr_dpb_luma: %u \n" + " top field: misr_dpb_chroma: %u \n" + " top field: misr_opb_luma: %u \n" + " top field: misr_opb_chroma: %u \n" + " bottom field: misr_dpb_luma: %u \n" + "bottom field: misr_dpb_chroma: %u \n" + " bottom field: misr_opb_luma: %u \n" + "bottom field: misr_opb_chroma: %u \n" + "================== End of output crop ===========", + (unsigned int)outputcrop_info->left, + (unsigned int)outputcrop_info->top, + (unsigned int)outputcrop_info->display_width, + (unsigned int)outputcrop_info->display_height, + (unsigned int)outputcrop_info->width, + (unsigned int)outputcrop_info->height, + (unsigned int)outputcrop_info->frame_num, + (unsigned int)outputcrop_info->bit_depth_y, + (unsigned int)outputcrop_info->bit_depth_c, + (unsigned int)outputcrop_info->misr_info[0].misr_dpb_luma, + (unsigned int)outputcrop_info->misr_info[0].misr_dpb_chroma, + (unsigned int)outputcrop_info->misr_info[0].misr_opb_luma, + (unsigned int)outputcrop_info->misr_info[0].misr_opb_chroma, + (unsigned int)outputcrop_info->misr_info[1].misr_dpb_luma, + (unsigned int)outputcrop_info->misr_info[1].misr_dpb_chroma, + (unsigned int)outputcrop_info->misr_info[1].misr_opb_luma, + (unsigned int)outputcrop_info->misr_info[1].misr_opb_chroma); } else if (extra->eType == OMX_ExtraDataNone) { DEBUG_PRINT_HIGH("========== End of Terminator ==========="); } else { @@ -10713,6 +10772,18 @@ void omx_vdec::append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra) (unsigned int)portDefn->format.video.nSliceHeight); } +void omx_vdec::append_outputcrop_extradata(OMX_OTHER_EXTRADATATYPE *extra, + struct msm_vidc_output_crop_payload *output_crop_payload) { + extra->nSize = OMX_OUTPUTCROP_EXTRADATA_SIZE; + extra->nVersion.nVersion = OMX_SPEC_VERSION; + extra->nPortIndex = OMX_CORE_OUTPUT_PORT_INDEX; + extra->eType = (OMX_EXTRADATATYPE)OMX_ExtraDataOutputCropInfo; + extra->nDataSize = sizeof(OMX_QCOM_OUTPUT_CROP); + memcpy(extra->data, output_crop_payload, extra->nDataSize); + + print_debug_extradata(extra); +} + void omx_vdec::append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra, struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload) { |