summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Strudel <tstrudel@google.com>2016-10-21 16:28:30 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-10-21 16:28:30 +0000
commit3abcc0f1d2061faaa244efa5187071662a919975 (patch)
treea5add09ba6200749a64d6d0196ab80594451fd2d
parent7794cecbfbd1012260fc453b52a3e7000ddcf956 (diff)
parent42adfa335ea53084e6934b6dc9864f34e0833265 (diff)
downloadmedia-3abcc0f1d2061faaa244efa5187071662a919975.tar.gz
msmcobalt: update to 07.00.00.253.035
am: 42adfa335e Change-Id: I46d84fc010102c230ea312fb1221d1a3b81e78a5
-rwxr-xr-xmsmcobalt/mm-core/src/msm8953/registry_table.c26
-rwxr-xr-xmsmcobalt/mm-core/src/msm8953/registry_table_android.c26
-rw-r--r--msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h8
-rw-r--r--msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp1
-rw-r--r--msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp80
-rw-r--r--msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h3
-rw-r--r--msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp69
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);