summaryrefslogtreecommitdiff
path: root/mm-video-v4l2/vidc/vdec/src
diff options
context:
space:
mode:
Diffstat (limited to 'mm-video-v4l2/vidc/vdec/src')
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp17
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp105
2 files changed, 13 insertions, 109 deletions
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp b/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
index a5ebb413..b7a3d799 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
@@ -2860,14 +2860,23 @@ OMX_ERRORTYPE omx_swvdec::get_port_definition(
p_port_def->bEnabled = m_port_ip.enabled;
p_port_def->bPopulated = m_port_ip.populated;
+ // VTS uses input port dimensions to set OP dimensions
+ if ((retval = get_frame_dimensions_swvdec()) != OMX_ErrorNone)
+ {
+ goto get_port_definition_exit;
+ }
+
+ p_port_def->format.video.nFrameWidth = m_frame_dimensions.width;
+ p_port_def->format.video.nFrameHeight = m_frame_dimensions.height;
+
OMX_SWVDEC_LOG_HIGH("port index %d: "
- "count actual %d, count min %d, size %d",
+ "count actual %d, count min %d, size %d, %d x %d",
p_port_def->nPortIndex,
p_port_def->nBufferCountActual,
p_port_def->nBufferCountMin,
- p_port_def->nBufferSize);
-
- // frame dimensions & attributes don't apply to input port
+ p_port_def->nBufferSize,
+ p_port_def->format.video.nFrameWidth,
+ p_port_def->format.video.nFrameHeight);
p_port_def->format.video.eColorFormat = OMX_COLOR_FormatUnused;
p_port_def->format.video.eCompressionFormat = m_omx_video_codingtype;
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 7ad50e96..3e8e29e8 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -835,7 +835,6 @@ omx_vdec::omx_vdec(): m_error_propogated(false),
m_fill_output_msg = OMX_COMPONENT_GENERATE_FTB;
client_buffers.set_vdec_client(this);
dynamic_buf_mode = false;
- out_dynamic_list = NULL;
is_down_scalar_enabled = false;
m_downscalar_width = 0;
m_downscalar_height = 0;
@@ -7184,7 +7183,6 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy(
if (dynamic_buf_mode) {
drv_ctx.ptr_outputbuffer[nPortIndex].offset = 0;
drv_ctx.ptr_outputbuffer[nPortIndex].buffer_len = buffer->nAllocLen;
- buf_ref_add(nPortIndex);
drv_ctx.ptr_outputbuffer[nPortIndex].mmaped_size = buffer->nAllocLen;
}
@@ -8575,7 +8573,6 @@ void omx_vdec::free_output_buffer_header()
drv_ctx.op_buf_ion_info = NULL;
}
#endif
- buf_ref_remove();
}
void omx_vdec::free_input_buffer_header()
@@ -9030,14 +9027,6 @@ OMX_ERRORTYPE omx_vdec::allocate_output_headers()
return OMX_ErrorInsufficientResources;
}
#endif
- if (dynamic_buf_mode) {
- out_dynamic_list = (struct dynamic_buf_list *) \
- calloc (sizeof(struct dynamic_buf_list), drv_ctx.op_buf.actualcount);
- if (out_dynamic_list) {
- for (unsigned int i = 0; i < drv_ctx.op_buf.actualcount; i++)
- out_dynamic_list[i].dup_fd = -1;
- }
- }
if (m_out_mem_ptr && pPtr && drv_ctx.ptr_outputbuffer
&& drv_ctx.ptr_respbuffer) {
@@ -9330,12 +9319,6 @@ bool omx_vdec::handle_color_space_info(void *data)
memset(&tempAspects, 0x0, sizeof(ColorAspects));
ColorAspects *aspects = &tempAspects;
- /* Set default coloraspects to BT601-LR */
- aspects->mPrimaries = ColorAspects::PrimariesBT601_6_525;
- aspects->mRange = ColorAspects::RangeLimited;
- aspects->mTransfer = ColorAspects::TransferSMPTE170M;
- aspects->mMatrixCoeffs = ColorAspects::MatrixBT601_6;
-
switch(output_capability) {
case V4L2_PIX_FMT_MPEG2:
{
@@ -11454,94 +11437,6 @@ OMX_ERRORTYPE omx_vdec::allocate_color_convert_buf::cache_ops(
return OMX_ErrorNone;
}
-void omx_vdec::buf_ref_add(int nPortIndex)
-{
- unsigned long i = 0;
- bool buf_present = false;
- long fd = drv_ctx.ptr_outputbuffer[nPortIndex].pmem_fd;
- OMX_U32 offset = drv_ctx.ptr_outputbuffer[nPortIndex].offset;
-
- if (!dynamic_buf_mode || !out_dynamic_list) {
- return;
- }
-
- pthread_mutex_lock(&m_lock);
- for (i = 0; i < drv_ctx.op_buf.actualcount; i++) {
- //check the buffer fd, offset, uv addr with list contents
- //If present increment reference.
- if ((out_dynamic_list[i].fd == fd) &&
- (out_dynamic_list[i].offset == offset)) {
- DEBUG_PRINT_LOW("buf_ref_add: [ALREADY PRESENT] fd = %u ref_count = %u",
- (unsigned int)out_dynamic_list[i].fd, (unsigned int)out_dynamic_list[i].ref_count);
- if (!secure_mode) {
- drv_ctx.ptr_outputbuffer[nPortIndex].bufferaddr = out_dynamic_list[i].buffaddr;
- }
- buf_present = true;
- break;
- }
- }
- if (!buf_present) {
- for (i = 0; i < drv_ctx.op_buf.actualcount; i++) {
- //search for a entry to insert details of the new buffer
- if (out_dynamic_list[i].dup_fd < 0) {
- out_dynamic_list[i].fd = fd;
- out_dynamic_list[i].offset = offset;
- out_dynamic_list[i].dup_fd = dup(fd);
- out_dynamic_list[i].ref_count++;
- DEBUG_PRINT_LOW("buf_ref_add: [ADDED] fd = %u ref_count = %u",
- (unsigned int)out_dynamic_list[i].fd, (unsigned int)out_dynamic_list[i].ref_count);
-
- if (!secure_mode) {
- drv_ctx.ptr_outputbuffer[nPortIndex].bufferaddr =
- (OMX_U8*)mmap(0, drv_ctx.ptr_outputbuffer[nPortIndex].buffer_len,
- PROT_READ|PROT_WRITE, MAP_SHARED,
- drv_ctx.ptr_outputbuffer[nPortIndex].pmem_fd, 0);
- //mmap returns (void *)-1 on failure and sets error code in errno.
- if (drv_ctx.ptr_outputbuffer[nPortIndex].bufferaddr == MAP_FAILED) {
- DEBUG_PRINT_ERROR("buf_ref_add: mmap failed - errno: %d", errno);
- drv_ctx.ptr_outputbuffer[nPortIndex].bufferaddr = NULL;
- break;
- }
- out_dynamic_list[i].buffaddr = drv_ctx.ptr_outputbuffer[nPortIndex].bufferaddr;
- out_dynamic_list[i].mapped_size = drv_ctx.ptr_outputbuffer[nPortIndex].buffer_len;
- DEBUG_PRINT_LOW("mmap: %p %ld", out_dynamic_list[i].buffaddr, out_dynamic_list[i].mapped_size);
- }
- break;
- }
- }
- }
- pthread_mutex_unlock(&m_lock);
-}
-
-void omx_vdec::buf_ref_remove()
-{
- unsigned long i = 0;
-
- if (!dynamic_buf_mode || !out_dynamic_list) {
- return;
- }
-
- pthread_mutex_lock(&m_lock);
- for (i = 0; i < drv_ctx.op_buf.actualcount; i++) {
- if (!secure_mode && out_dynamic_list[i].buffaddr && out_dynamic_list[i].mapped_size) {
- DEBUG_PRINT_LOW("munmap: %p %ld", out_dynamic_list[i].buffaddr, out_dynamic_list[i].mapped_size);
- munmap(out_dynamic_list[i].buffaddr,
- out_dynamic_list[i].mapped_size);
- }
-
- DEBUG_PRINT_LOW("buf_ref_remove: [REMOVED] fd = %u ref_count = %u",
- (unsigned int)out_dynamic_list[i].fd, (unsigned int)out_dynamic_list[i].ref_count);
- close(out_dynamic_list[i].dup_fd);
- out_dynamic_list[i].dup_fd = -1;
- }
- pthread_mutex_unlock(&m_lock);
-
- if (out_dynamic_list) {
- free(out_dynamic_list);
- out_dynamic_list = NULL;
- }
-}
-
void omx_vdec::send_codec_config() {
if (codec_config_flag) {
unsigned long p1 = 0; // Parameter - 1