diff options
author | Thierry Strudel <tstrudel@google.com> | 2017-07-18 12:54:29 -0700 |
---|---|---|
committer | Thierry Strudel <tstrudel@google.com> | 2017-07-18 17:27:13 -0700 |
commit | 30d04e5dd30a85b2750d88b3010b5af313b95bc4 (patch) | |
tree | 6f1b8ef213cee54f85508a454f5ccbd778679236 | |
parent | 386fc0bdf57359701ba4cc931524d677040d5f0c (diff) | |
download | media-30d04e5dd30a85b2750d88b3010b5af313b95bc4.tar.gz |
msm8998: Update to 07.00.00.279.293
msm8998: from hardware/qcom/media
c3ec4719 mm-video-v4l2: venc: Set 601-Limited colorspace for color-converted buffers
43b62e11 Merge "mm-video-v4l2: venc: Protect buffer from being freed while accessing"
93872aa1 Merge "mm-video-v4l2: remove legacy compilation flag TARGET_USES_MEDIA_EXTENSIONS"
5c572948 mm-video-v4l2: remove legacy compilation flag TARGET_USES_MEDIA_EXTENSIONS
c0dd3100 video: Move data dump location to vendor partition
175584c5 mm-video-v4l2: venc: Protect buffer from being freed while accessing
Test: build, boot, sanity checks
Bug: 63804057
Change-Id: Ie4c9e98f522f72ec022abc5f856e616ef65147f6
Signed-off-by: Thierry Strudel <tstrudel@google.com>
7 files changed, 22 insertions, 7 deletions
diff --git a/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h index cfd3676..a6502ab 100644 --- a/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h +++ b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h @@ -1,7 +1,7 @@ /** * @copyright * - * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -115,7 +115,7 @@ private: pthread_mutex_t m_mutex; ///< mutex }; -#define DIAG_FILE_PATH "/data/misc/media" ///< file path +#define DIAG_FILE_PATH "/data/vendor/media" ///< file path /// OMX SwVdec diagnostics class class omx_swvdec_diag diff --git a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 5b85cf7..13e8e36 100644 --- a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -88,11 +88,11 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define EGL_BUFFER_OFFSET 0x4F01 #endif -#define BUFFER_LOG_LOC "/data/misc/media" +#define BUFFER_LOG_LOC "/data/vendor/media" #ifdef OUTPUT_EXTRADATA_LOG FILE *outputExtradataFile; -char output_extradata_filename [] = "/data/misc/media/extradata"; +char output_extradata_filename [] = "/data/vendor/media/extradata"; #endif #define DEFAULT_FPS 30 diff --git a/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h index 8643e3f..13b5025 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h +++ b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h @@ -690,6 +690,7 @@ class omx_video: public qc_omx_component omx_cmd_queue m_opq_meta_q; omx_cmd_queue m_opq_pmem_q; OMX_BUFFERHEADERTYPE meta_buffer_hdr[MAX_NUM_INPUT_BUFFERS]; + pthread_mutex_t m_buf_lock; bool input_flush_progress; bool output_flush_progress; diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp index e33c7b2..5f0843b 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp +++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp @@ -51,7 +51,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define RETURN(x) EXIT_FUNC(); return x; #define ALIGN(value,alignment) (((value) + (alignment-1)) & (~(alignment-1))) -#define BUFFER_LOG_LOC "/data/misc/media" +#define BUFFER_LOG_LOC "/data/vendor/media" /* factory function executed by the core to create instances */ void *get_omx_component_factory_fn(void) diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp index 2da32df..4493fa6 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -319,6 +319,8 @@ omx_video::omx_video(): property_get("ro.board.platform", platform_name, "0"); strlcpy(m_platform, platform_name, sizeof(m_platform)); #endif + + pthread_mutex_init(&m_buf_lock, NULL); } @@ -360,6 +362,8 @@ omx_video::~omx_video() sem_destroy(&m_cmd_lock); DEBUG_PRINT_HIGH("m_etb_count = %" PRIu64 ", m_fbd_count = %" PRIu64, m_etb_count, m_fbd_count); + + pthread_mutex_destroy(&m_buf_lock); DEBUG_PRINT_HIGH("omx_video: Destructor exit"); DEBUG_PRINT_HIGH("Exiting OMX Video Encoder ..."); } @@ -2741,6 +2745,7 @@ OMX_ERRORTYPE omx_video::use_output_buffer( return OMX_ErrorBadParameter; } + auto_lock l(m_buf_lock); if (!m_out_mem_ptr) { output_use_buffer = true; int nBufHdrSize = 0; @@ -3699,6 +3704,7 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp, nPortIndex, (unsigned int)m_sOutPortDef.nBufferCountActual); if (nPortIndex < m_sOutPortDef.nBufferCountActual && BITMASK_PRESENT(&m_out_bm_count, nPortIndex)) { + auto_lock l(m_buf_lock); // Clear the bit associated with it. BITMASK_CLEAR(&m_out_bm_count,nPortIndex); m_sOutPortDef.bPopulated = OMX_FALSE; diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp index 0c26a43..2f26281 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -2705,10 +2705,17 @@ int omx_venc::async_message_process (void *context, void* message) OMX_COMPONENT_GENERATE_EBD); break; case VEN_MSG_OUTPUT_BUFFER_DONE: + { omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata; + OMX_U32 bufIndex = (OMX_U32)(omxhdr - omx->m_out_mem_ptr); if ( (omxhdr != NULL) && - ((OMX_U32)(omxhdr - omx->m_out_mem_ptr) < omx->m_sOutPortDef.nBufferCountActual)) { + (bufIndex < omx->m_sOutPortDef.nBufferCountActual)) { + auto_lock l(omx->m_buf_lock); + if (BITMASK_ABSENT(&(omx->m_out_bm_count), bufIndex)) { + DEBUG_PRINT_ERROR("Recieved FBD for buffer that is already freed !"); + break; + } if (!omx->is_secure_session() && (m_sVenc_msg->buf.len <= omxhdr->nAllocLen)) { omxhdr->nFilledLen = m_sVenc_msg->buf.len; omxhdr->nOffset = m_sVenc_msg->buf.offset; @@ -2751,6 +2758,7 @@ int omx_venc::async_message_process (void *context, void* message) omx->post_event ((unsigned long)omxhdr,m_sVenc_msg->statuscode, OMX_COMPONENT_GENERATE_FBD); break; + } case VEN_MSG_NEED_OUTPUT_BUFFER: //TBD what action needs to be done here?? break; diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index 64b709d..4e026c0 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -164,7 +164,7 @@ static const unsigned int hevc_profile_level_table[][MAX_PROFILE_PARAMS]= { #define Log2(number, power) { OMX_U32 temp = number; power = 0; while( (0 == (temp & 0x1)) && power < 16) { temp >>=0x1; power++; } } #define Q16ToFraction(q,num,den) { OMX_U32 power; Log2(q,power); num = q >> power; den = 0x1 << (16 - power); } -#define BUFFER_LOG_LOC "/data/misc/media" +#define BUFFER_LOG_LOC "/data/vendor/media" //constructor venc_dev::venc_dev(class omx_venc *venc_class) |