diff options
author | Thierry Strudel <tstrudel@google.com> | 2016-10-21 16:28:30 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-10-21 16:28:30 +0000 |
commit | 3abcc0f1d2061faaa244efa5187071662a919975 (patch) | |
tree | a5add09ba6200749a64d6d0196ab80594451fd2d | |
parent | 7794cecbfbd1012260fc453b52a3e7000ddcf956 (diff) | |
parent | 42adfa335ea53084e6934b6dc9864f34e0833265 (diff) | |
download | media-3abcc0f1d2061faaa244efa5187071662a919975.tar.gz |
msmcobalt: update to 07.00.00.253.035
am: 42adfa335e
Change-Id: I46d84fc010102c230ea312fb1221d1a3b81e78a5
7 files changed, 137 insertions, 76 deletions
diff --git a/msmcobalt/mm-core/src/msm8953/registry_table.c b/msmcobalt/mm-core/src/msm8953/registry_table.c index 48831f3..b6ac3ed 100755 --- a/msmcobalt/mm-core/src/msm8953/registry_table.c +++ b/msmcobalt/mm-core/src/msm8953/registry_table.c @@ -274,6 +274,32 @@ omx_core_cb_type core[] = "video_decoder.vp9" } }, + { + "OMX.qcom.audio.decoder.amrwb", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxAmrDec.so", + { + "audio_decoder.amrwb" + } + }, + { + "OMX.qcom.audio.decoder.amrnb", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxAmrDec.so", + { + "audio_decoder.amrnb" + } + }, { "OMX.qcom.video.encoder.mpeg4", NULL, // Create instance function diff --git a/msmcobalt/mm-core/src/msm8953/registry_table_android.c b/msmcobalt/mm-core/src/msm8953/registry_table_android.c index 0d8c8ca..b5aaa5f 100755 --- a/msmcobalt/mm-core/src/msm8953/registry_table_android.c +++ b/msmcobalt/mm-core/src/msm8953/registry_table_android.c @@ -301,6 +301,32 @@ omx_core_cb_type core[] = } }, { + "OMX.qcom.audio.decoder.amrnb", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxAmrDec.so", + { + "audio_decoder.amrnb" + } + }, + { + "OMX.qcom.audio.decoder.amrwb", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxAmrDec.so", + { + "audio_decoder.amrwb" + } + }, + { "OMX.qcom.video.encoder.mpeg4", NULL, // Create instance function // Unique instance handle diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 2f44cd8..2376b62 100644 --- a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -1173,8 +1173,8 @@ class omx_vdec: public qc_omx_component OMX_COLOR_FORMATTYPE formatsDefault[] = { [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed, [1] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, - [2] = OMX_COLOR_FormatYUV420Planar, - [3] = OMX_COLOR_FormatYUV420SemiPlanar, + [2] = OMX_COLOR_FormatYUV420SemiPlanar, + [3] = OMX_COLOR_FormatYUV420Planar, [4] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView, }; format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ? @@ -1182,8 +1182,8 @@ class omx_vdec: public qc_omx_component } else { OMX_COLOR_FORMATTYPE formatsDefault[] = { [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, - [1] = OMX_COLOR_FormatYUV420Planar, - [2] = OMX_COLOR_FormatYUV420SemiPlanar, + [1] = OMX_COLOR_FormatYUV420SemiPlanar, + [2] = OMX_COLOR_FormatYUV420Planar, [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView, }; format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ? diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp b/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp index 2698d52..eda46e4 100644 --- a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp +++ b/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp @@ -3213,6 +3213,7 @@ OMX_ERRORTYPE omx_swvdec::describe_color_format( case OMX_COLOR_FormatYUV420SemiPlanar: { // do nothing; standard OMX color formats should not be described + retval = OMX_ErrorUnsupportedSetting; break; } diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 90b930a..b722408 100644 --- a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -8163,47 +8163,6 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, } } - if (!output_flush_progress && (buffer->nFilledLen > 0)) { - // set the default colorspace advised by client, since the bitstream may be - // devoid of colorspace-info. - if (m_enable_android_native_buffers) { - ColorSpace_t color_space = ITU_R_601; - - // Disabled ? - // WA for VP8. Vp8 encoder does not embed color-info (yet!). - // Encoding RGBA results in 601-LR for all resolutions. - // This conflicts with the client't defaults which are based on resolution. - // Eg: 720p will be encoded as 601-LR. Client will say 709. - // Re-enable this code once vp8 encoder generates color-info and hence the - // decoder will be able to override with the correct source color. -#if 0 - switch (m_client_color_space.sAspects.mPrimaries) { - case ColorAspects::PrimariesBT601_6_625: - case ColorAspects::PrimariesBT601_6_525: - { - color_space = m_client_color_space.sAspects.mRange == ColorAspects::RangeFull ? - ITU_R_601_FR : ITU_R_601; - break; - } - case ColorAspects::PrimariesBT709_5: - { - color_space = ITU_R_709; - break; - } - default: - { - break; - } - } -#endif - DEBUG_PRINT_LOW("setMetaData for Color Space (client) = 0x%x (601=%u FR=%u 709=%u)", - color_space, ITU_R_601, ITU_R_601_FR, ITU_R_709); - set_colorspace_in_handle(color_space, buffer - m_out_mem_ptr); - } - DEBUG_PRINT_LOW("Processing extradata"); - handle_extradata(buffer); - } - #ifdef OUTPUT_EXTRADATA_LOG if (outputExtradataFile) { int buf_index = buffer - m_out_mem_ptr; @@ -8684,6 +8643,45 @@ int omx_vdec::async_message_process (void *context, void* message) } if (vdec_msg->msgdata.output_frame.len) { + if (!omx->output_flush_progress && (omxhdr->nFilledLen > 0)) { + // set the default colorspace advised by client, since the bitstream may be + // devoid of colorspace-info. + if (omx->m_enable_android_native_buffers) { + ColorSpace_t color_space = ITU_R_601; + + // Disabled ? + // WA for VP8. Vp8 encoder does not embed color-info (yet!). + // Encoding RGBA results in 601-LR for all resolutions. + // This conflicts with the client't defaults which are based on resolution. + // Eg: 720p will be encoded as 601-LR. Client will say 709. + // Re-enable this code once vp8 encoder generates color-info and hence the + // decoder will be able to override with the correct source color. +#if 0 + switch (omx->m_client_color_space.sAspects.mPrimaries) { + case ColorAspects::PrimariesBT601_6_625: + case ColorAspects::PrimariesBT601_6_525: + { + color_space = omx->m_client_color_space.sAspects.mRange == ColorAspects::RangeFull ? + ITU_R_601_FR : ITU_R_601; + break; + } + case ColorAspects::PrimariesBT709_5: + { + color_space = ITU_R_709; + break; + } + default: + { + break; + } + } +#endif + DEBUG_PRINT_LOW("setMetaData for Color Space (client) = 0x%x (601=%u FR=%u 709=%u)", + color_space, ITU_R_601, ITU_R_601_FR, ITU_R_709); + omx->set_colorspace_in_handle(color_space, omxhdr - omx->m_out_mem_ptr); + } + } + DEBUG_PRINT_LOW("Processing extradata"); omx->handle_extradata(omxhdr); diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h index 43d2705..b3794b4 100644 --- a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h +++ b/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h @@ -458,7 +458,8 @@ class venc_dev bool async_thread_force_stop; class omx_venc *venc_handle; OMX_ERRORTYPE allocate_extradata(struct extradata_buffer_info *extradata_info); - void free_extradata(); + void free_extradata_all(); + void free_extradata(struct extradata_buffer_info *extradata_info); int append_mbi_extradata(void *, struct msm_vidc_extradata_header*); bool handle_output_extradata(void *, int); bool handle_input_extradata(struct v4l2_buffer); diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index b2a00cd..a6d119d 100644 --- a/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -1020,45 +1020,38 @@ OMX_ERRORTYPE venc_dev::allocate_extradata(struct extradata_buffer_info *extrada return OMX_ErrorNone; } -void venc_dev::free_extradata() +void venc_dev::free_extradata(struct extradata_buffer_info *extradata_info) { #ifdef USE_ION - if (output_extradata_info.uaddr) { - munmap((void *)output_extradata_info.uaddr, output_extradata_info.size); - close(output_extradata_info.ion.fd_ion_data.fd); - venc_handle->free_ion_memory(&output_extradata_info.ion); + if (extradata_info == NULL) { + return; } - if (output_extradata_info.m_ion_dev) - close(output_extradata_info.m_ion_dev); - memset(&output_extradata_info, 0, sizeof(output_extradata_info)); - output_extradata_info.ion.fd_ion_data.fd = -1; - - if (input_extradata_info.uaddr) { - munmap((void *)input_extradata_info.uaddr, input_extradata_info.size); - close(input_extradata_info.ion.fd_ion_data.fd); - venc_handle->free_ion_memory(&input_extradata_info.ion); + if (extradata_info->uaddr) { + munmap((void *)extradata_info->uaddr, extradata_info->size); + extradata_info->uaddr = NULL; + close(extradata_info->ion.fd_ion_data.fd); + venc_handle->free_ion_memory(&extradata_info->ion); } - if (input_extradata_info.m_ion_dev) - close(output_extradata_info.m_ion_dev); + if (extradata_info->m_ion_dev) + close(extradata_info->m_ion_dev); - memset(&input_extradata_info, 0, sizeof(input_extradata_info)); - input_extradata_info.ion.fd_ion_data.fd = -1; + memset(extradata_info, 0, sizeof(*extradata_info)); + extradata_info->ion.fd_ion_data.fd = -1; + extradata_info->allocated = OMX_FALSE; -#ifdef _PQ_ - if (m_pq.roi_extradata_info.uaddr) { - munmap((void *)m_pq.roi_extradata_info.uaddr, m_pq.roi_extradata_info.size); - close(m_pq.roi_extradata_info.ion.fd_ion_data.fd); - venc_handle->free_ion_memory(&m_pq.roi_extradata_info.ion); - } +#endif // USE_ION +} - memset(&m_pq.roi_extradata_info, 0, sizeof(m_pq.roi_extradata_info)); - m_pq.roi_extradata_info.ion.fd_ion_data.fd = -1; +void venc_dev::free_extradata_all() +{ + free_extradata(&output_extradata_info); + free_extradata(&input_extradata_info); +#ifdef _PQ_ + free_extradata(&m_pq.roi_extradata_info); #endif // _PQ_ - -#endif } bool venc_dev::venc_get_output_log_flag() @@ -1510,7 +1503,6 @@ bool venc_dev::venc_open(OMX_U32 codec) #ifdef _PQ_ if (codec == OMX_VIDEO_CodingAVC) { m_pq.init(V4L2_DEFAULT_OUTPUT_COLOR_FMT); - allocate_extradata(&m_pq.roi_extradata_info); m_pq.get_caps(); } #endif // _PQ_ @@ -2574,6 +2566,7 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index) } #ifdef _PQ_ m_pq.pConfig.a_qp.roi_enabled = (OMX_U32)true; + allocate_extradata(&m_pq.roi_extradata_info); m_pq.configure(); #endif // _PQ_ break; @@ -3154,7 +3147,7 @@ unsigned venc_dev::venc_start_done(void) unsigned venc_dev::venc_stop_done(void) { struct venc_msg venc_msg; - free_extradata(); + free_extradata_all(); venc_msg.msgcode=VEN_MSG_STOP; venc_msg.statuscode=VEN_S_SUCCESS; venc_handle->async_message_process(venc_handle,&venc_msg); @@ -3496,6 +3489,17 @@ unsigned venc_dev::venc_flush( unsigned port) struct v4l2_encoder_cmd enc; DEBUG_PRINT_LOW("in %s", __func__); + unsigned int cookie = 0; + for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++) { + cookie = fd_list[i]; + if (cookie != 0) { + if (!ioctl(input_extradata_info.m_ion_dev, ION_IOC_FREE, &cookie)) { + DEBUG_PRINT_HIGH("Freed handle = %u", cookie); + } + fd_list[i] = 0; + } + } + enc.cmd = V4L2_ENC_QCOM_CMD_FLUSH; enc.flags = V4L2_QCOM_CMD_FLUSH_OUTPUT | V4L2_QCOM_CMD_FLUSH_CAPTURE; @@ -4410,14 +4414,19 @@ int venc_dev::venc_get_index_from_fd(OMX_U32 ion_fd, OMX_U32 buffer_fd) fdData.fd = buffer_fd; if (ion_fd && !ioctl(ion_fd, ION_IOC_IMPORT, &fdData)) { cookie = fdData.handle; + DEBUG_PRINT_HIGH("FD = %u imported handle = %u", fdData.fd, fdData.handle); } for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++) { if (fd_list[i] == cookie) { DEBUG_PRINT_HIGH("FD is present at index = %d", i); + if (ion_fd && !ioctl(ion_fd, ION_IOC_FREE, &fdData.handle)) { + DEBUG_PRINT_HIGH("freed handle = %u", cookie); + } return i; } } + for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++) if (fd_list[i] == 0) { DEBUG_PRINT_HIGH("FD added at index = %d", i); |