diff options
Diffstat (limited to 'mm-video-v4l2/vidc/vdec/src')
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp | 17 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 105 |
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 |