mm-video: vidc: cut down on OMX_USERDATA_EXTRADATA_SIZE buffer size
OMX_USERDATA_EXTRADATA_SIZE should be determined by what the driver
claims the size to be. Previously we assume 8K and waste unnecessary
memory.
CRs-Fixed: 647383
Change-Id: Ib2f55e847169a249de18e7a3e7c0ff765cfc9689
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
index e334506..de57455 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -7923,41 +7923,11 @@
DEBUG_PRINT_ERROR("Extradata index is more than allowed: %d", extra_idx);
return OMX_ErrorBadParameter;
}
- if (client_extradata & OMX_FRAMEINFO_EXTRADATA) {
- DEBUG_PRINT_HIGH("Frame info extra data enabled!");
- client_extra_data_size += OMX_FRAMEINFO_EXTRADATA_SIZE;
- }
- if (client_extradata & OMX_INTERLACE_EXTRADATA) {
- client_extra_data_size += OMX_INTERLACE_EXTRADATA_SIZE;
- }
- if (client_extradata & OMX_PORTDEF_EXTRADATA) {
- client_extra_data_size += OMX_PORTDEF_EXTRADATA_SIZE;
- DEBUG_PRINT_HIGH("Smooth streaming enabled extra_data_size=%d",
- client_extra_data_size);
- }
- if (client_extradata & OMX_FRAMEPACK_EXTRADATA) {
- client_extra_data_size += OMX_FRAMEPACK_EXTRADATA_SIZE;
- DEBUG_PRINT_HIGH("framepack extradata enabled");
- }
- if (client_extradata & OMX_QP_EXTRADATA) {
- client_extra_data_size += OMX_QP_EXTRADATA_SIZE;
- DEBUG_PRINT_HIGH("QP extradata enabled");
- }
- if (client_extradata & OMX_BITSINFO_EXTRADATA) {
- client_extra_data_size += OMX_BITSINFO_EXTRADATA_SIZE;
- DEBUG_PRINT_HIGH("Input bits info extradata enabled");
- }
- if (client_extradata & OMX_EXTNUSER_EXTRADATA) {
- client_extra_data_size += OMX_USERDATA_EXTRADATA_SIZE;
- DEBUG_PRINT_HIGH("Userdata extradata enabled");
- }
- if (client_extra_data_size) {
- client_extra_data_size += sizeof(OMX_OTHER_EXTRADATATYPE); //Space for terminator
- buf_size = ((buf_size + 3)&(~3)); //Align extradata start address to 64Bit
- }
- final_extra_data_size = (extra_data_size > client_extra_data_size ?
- extra_data_size : client_extra_data_size);
+ /* The output buffer already contains 9K of space (see VENUS_BUFFER_SIZE())
+ * for extradata. That might be more than enough */
+ final_extra_data_size = extra_data_size > 9*1024 ? extra_data_size : 9*1024;
+
drv_ctx.extradata_info.size = buffer_prop->actualcount * final_extra_data_size;
drv_ctx.extradata_info.count = buffer_prop->actualcount;
drv_ctx.extradata_info.buffer_size = final_extra_data_size;
@@ -9082,7 +9052,7 @@
userdata_payload =
(struct msm_vidc_stream_userdata_payload *)p_user->data;
userdata_size = p_user->nDataSize;
- extra->nSize = OMX_USERDATA_EXTRADATA_SIZE;
+ extra->nSize = OMX_USERDATA_EXTRADATA_SIZE + p_user->nSize;
extra->nVersion.nVersion = OMX_SPEC_VERSION;
extra->nPortIndex = OMX_CORE_OUTPUT_PORT_INDEX;
extra->eType = (OMX_EXTRADATATYPE)OMX_ExtraDataMP2UserData;