diff options
Diffstat (limited to 'mm-video')
-rw-r--r-- | mm-video/vidc/vdec/inc/omx_vdec.h | 1 | ||||
-rw-r--r-- | mm-video/vidc/vdec/src/omx_vdec.cpp | 20 | ||||
-rw-r--r-- | mm-video/vidc/venc/inc/omx_video_base.h | 3 | ||||
-rw-r--r-- | mm-video/vidc/venc/inc/omx_video_encoder.h | 1 | ||||
-rw-r--r-- | mm-video/vidc/venc/inc/video_encoder_device.h | 1 | ||||
-rw-r--r-- | mm-video/vidc/venc/src/omx_video_base.cpp | 7 | ||||
-rw-r--r-- | mm-video/vidc/venc/src/omx_video_encoder.cpp | 10 | ||||
-rw-r--r-- | mm-video/vidc/venc/src/video_encoder_device.cpp | 13 |
8 files changed, 54 insertions, 2 deletions
diff --git a/mm-video/vidc/vdec/inc/omx_vdec.h b/mm-video/vidc/vdec/inc/omx_vdec.h index 3dcc8d5e..d9258bc5 100644 --- a/mm-video/vidc/vdec/inc/omx_vdec.h +++ b/mm-video/vidc/vdec/inc/omx_vdec.h @@ -777,6 +777,7 @@ private: unsigned nal_length; bool look_ahead_nal; int first_frame; + unsigned int current_performance; unsigned char *first_buffer; int first_frame_size; unsigned char m_hwdevice_name[80]; diff --git a/mm-video/vidc/vdec/src/omx_vdec.cpp b/mm-video/vidc/vdec/src/omx_vdec.cpp index 5f6ef475..747c7b76 100644 --- a/mm-video/vidc/vdec/src/omx_vdec.cpp +++ b/mm-video/vidc/vdec/src/omx_vdec.cpp @@ -549,7 +549,8 @@ omx_vdec::omx_vdec(): m_state(OMX_StateInvalid), secure_mode(false), m_use_uncache_buffers(false), external_meta_buffer(false), - external_meta_buffer_iommu(false) + external_meta_buffer_iommu(false), + current_performance(0) #ifdef _ANDROID_ ,iDivXDrmDecrypt(NULL) #endif @@ -1336,6 +1337,13 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role) eRet = OMX_ErrorInsufficientResources; goto cleanup; } + + ioctl_msg = {NULL,NULL}; + ioctl_msg.out = (void*)¤t_performance; + (void)(ioctl(drv_ctx.video_driver_fd, VDEC_IOCTL_GET_PERF_LEVEL, &ioctl_msg)); + DEBUG_PRINT_HIGH("component_init: current performance level = %u ", + current_performance); + #ifdef _ANDROID_ if(is_secure) sendBroadCastEvent(String16("qualcomm.intent.action.SECURE_START_DONE")); @@ -3948,6 +3956,16 @@ OMX_ERRORTYPE omx_vdec::get_config(OMX_IN OMX_HANDLETYPE hComp, memcpy(rect, &rectangle, sizeof(OMX_CONFIG_RECTTYPE)); break; } + case OMX_QcomIndexParamVideoPerformanceLevel: + { + struct vdec_ioctl_msg ioctl_msg = {NULL,NULL}; + OMX_QCOM_QUERY_PERFORMANCE *decoder_cur_perf_lvl = + (OMX_QCOM_QUERY_PERFORMANCE*)configData; + decoder_cur_perf_lvl->performance = current_performance; + DEBUG_PRINT_HIGH("get_config: current performance level = %d ", + decoder_cur_perf_lvl->performance); + break; + } default: { diff --git a/mm-video/vidc/venc/inc/omx_video_base.h b/mm-video/vidc/venc/inc/omx_video_base.h index ab120760..1763aefa 100644 --- a/mm-video/vidc/venc/inc/omx_video_base.h +++ b/mm-video/vidc/venc/inc/omx_video_base.h @@ -197,6 +197,7 @@ public: virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0; virtual bool dev_fill_buf(void *buffer, void *,unsigned,unsigned) = 0; virtual bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32) = 0; + virtual bool dev_get_curr_perf_lvl(OMX_PTR) = 0; virtual bool dev_get_seq_hdr(void *, unsigned, unsigned *) = 0; virtual bool dev_loaded_start(void) = 0; virtual bool dev_loaded_stop(void) = 0; @@ -563,6 +564,8 @@ public: unsigned int m_flags; unsigned int m_etb_count; unsigned int m_fbd_count; + + unsigned int m_curr_perf; #ifdef _ANDROID_ // Heap pointer to frame buffers sp<MemoryHeapBase> m_heap_ptr; diff --git a/mm-video/vidc/venc/inc/omx_video_encoder.h b/mm-video/vidc/venc/inc/omx_video_encoder.h index 4ba6d211..3e0900da 100644 --- a/mm-video/vidc/venc/inc/omx_video_encoder.h +++ b/mm-video/vidc/venc/inc/omx_video_encoder.h @@ -72,6 +72,7 @@ private: bool dev_empty_buf(void *, void *,unsigned,unsigned); bool dev_fill_buf(void *, void *,unsigned,unsigned); bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32); + bool dev_get_curr_perf_lvl(OMX_PTR); bool dev_set_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32); bool update_profile_level(); bool dev_get_seq_hdr(void *, unsigned, unsigned *); diff --git a/mm-video/vidc/venc/inc/video_encoder_device.h b/mm-video/vidc/venc/inc/video_encoder_device.h index 04d9a0e5..631feb10 100644 --- a/mm-video/vidc/venc/inc/video_encoder_device.h +++ b/mm-video/vidc/venc/inc/video_encoder_device.h @@ -72,6 +72,7 @@ public: unsigned long *,unsigned long); bool venc_set_buf_req(unsigned long *,unsigned long *, unsigned long *,unsigned long); + bool venc_get_curr_perf_lvl(OMX_PTR); bool venc_set_param(void *,OMX_INDEXTYPE); bool venc_set_config(void *configData, OMX_INDEXTYPE index); bool venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel); diff --git a/mm-video/vidc/venc/src/omx_video_base.cpp b/mm-video/vidc/venc/src/omx_video_base.cpp index e08868f4..49a8df30 100644 --- a/mm-video/vidc/venc/src/omx_video_base.cpp +++ b/mm-video/vidc/venc/src/omx_video_base.cpp @@ -1944,6 +1944,13 @@ OMX_ERRORTYPE omx_video::get_config(OMX_IN OMX_HANDLETYPE hComp, memcpy(pParam, &m_sIntraperiod, sizeof(m_sIntraperiod)); break; } + case OMX_QcomIndexParamVideoPerformanceLevel: + { + DEBUG_PRINT_LOW("get_config:OMX_QcomIndexParamVideoPerformanceLevel\n"); + OMX_QCOM_QUERY_PERFORMANCE *pParam = reinterpret_cast<OMX_QCOM_QUERY_PERFORMANCE*>(configData); + pParam->performance = m_curr_perf; + break; + } default: DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex); return OMX_ErrorUnsupportedIndex; diff --git a/mm-video/vidc/venc/src/omx_video_encoder.cpp b/mm-video/vidc/venc/src/omx_video_encoder.cpp index e44504f2..48ece06d 100644 --- a/mm-video/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video/vidc/venc/src/omx_video_encoder.cpp @@ -159,6 +159,10 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) return OMX_ErrorInsufficientResources; } + //Getting current performance level + m_curr_perf = 0; + dev_get_curr_perf_lvl(&m_curr_perf); + //Intialise the OMX layer variables memset(&m_pCallbacks,0,sizeof(OMX_CALLBACKTYPE)); @@ -453,7 +457,6 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) } } } - DEBUG_PRINT_HIGH("\n Component_init return value = 0x%x", eRet); return eRet; } @@ -1624,6 +1627,11 @@ bool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count, } +bool omx_venc::dev_get_curr_perf_lvl(OMX_PTR curr_perf) +{ + return handle->venc_get_curr_perf_lvl(curr_perf); +} + bool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count, OMX_U32 *actual_buff_count, OMX_U32 *buff_size, diff --git a/mm-video/vidc/venc/src/video_encoder_device.cpp b/mm-video/vidc/venc/src/video_encoder_device.cpp index 6e539035..165346a8 100644 --- a/mm-video/vidc/venc/src/video_encoder_device.cpp +++ b/mm-video/vidc/venc/src/video_encoder_device.cpp @@ -571,6 +571,19 @@ bool venc_dev::venc_get_buf_req(unsigned long *min_buff_count, } +bool venc_dev::venc_get_curr_perf_lvl(OMX_PTR curr_perf) +{ + struct vdec_ioctl_msg ioctl_msg = {NULL,NULL}; + ioctl_msg.out = (void*)curr_perf; + if (ioctl(m_nDriver_fd, VEN_IOCTL_GET_PERF_LEVEL, &ioctl_msg) < 0) + { + DEBUG_PRINT_ERROR("ioctl VENC_IOCTL_GET_CURR_PERF_LVL failed"); + return false; + } + DEBUG_PRINT_HIGH("get_curr_perf_lvl = %u", *(OMX_U32 *)(curr_perf)); + return true; +} + bool venc_dev::venc_set_param(void *paramData,OMX_INDEXTYPE index ) { venc_ioctl_msg ioctl_msg = {NULL,NULL}; |