1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*-------------------------------------------------------------------------- 2e4010605f233a213cf0d972397bb33c34c364227Patrick TjinCopyright (c) 2010-2015, The Linux Foundation. All rights reserved. 3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 4e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyRedistribution and use in source and binary forms, with or without 56eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmodification, are permitted provided that the following conditions are 66eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmet: 7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Redistributions of source code must retain the above copyright 8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly notice, this list of conditions and the following disclaimer. 96eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Redistributions in binary form must reproduce the above 106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal copyright notice, this list of conditions and the following 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal disclaimer in the documentation and/or other materials provided 126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal with the distribution. 136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor the names of its 146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal contributors may be used to endorse or promote products derived 156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal from this software without specific prior written permission. 16e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 176eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 186eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 196eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 206eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 216eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 226eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 236eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 246eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 256eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 266eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 276eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/ 29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VENC__H 30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VENC__H 31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 32826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h> 33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "omx_video_base.h" 346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 356eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include "video_encoder_device_v4l2.h" 36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "video_encoder_device.h" 38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" { 4161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_API void * get_omx_component_factory_fn(void); 42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_venc: public omx_video 45e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{ 4661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 4761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc(); //constructor 4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~omx_venc(); //des 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static int async_message_process (void *context, void* message); 5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_init(OMX_STRING role); 5161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 5261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE paramIndex, 5361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR paramData); 5461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 5561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE configIndex, 5661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR configData); 5761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp); 588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool is_secure_session(); 5961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //OMX strucutres 6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_nVenc_format; 6161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class venc_dev *handle; 62e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int dev_handle_output_extradata(void *); 63e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int dev_handle_input_extradata(void *, int); 64e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void dev_set_extradata_cookie(void *); 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int dev_set_format(int); 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_stop(void); 6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_pause(void); 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_start(void); 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_flush(unsigned); 7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_resume(void); 7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_start_done(void); 7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 dev_set_message_thread_id(pthread_t); 7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_use_buf( void *,unsigned,unsigned); 7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_free_buf( void *,unsigned); 7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_empty_buf(void *, void *,unsigned,unsigned); 7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_fill_buf(void *, void *,unsigned,unsigned); 7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32); 7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_set_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32); 8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool update_profile_level(); 81f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool dev_get_seq_hdr(void *, unsigned, unsigned *); 8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_loaded_start(void); 8361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_loaded_stop(void); 8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_loaded_start_done(void); 8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_loaded_stop_done(void); 8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_get_capability_ltrcount(OMX_U32 *, OMX_U32 *, OMX_U32 *); 878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool dev_get_performance_level(OMX_U32 *); 888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool dev_get_vui_timing_info(OMX_U32 *); 89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool dev_get_vqzip_sei_info(OMX_U32 *); 908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool dev_get_peak_bitrate(OMX_U32 *); 91e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool dev_get_batch_size(OMX_U32 *); 9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool dev_is_video_session_supported(OMX_U32 width, OMX_U32 height); 93c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width, 94c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 height); 958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool dev_get_output_log_flag(); 968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int dev_output_log_buffers(const char *buffer_addr, int buffer_len); 978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int dev_extradata_log_buffers(char *buffer); 98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin class perf_control { 99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin typedef int (*perf_lock_acquire_t)(int, int, int*, int); 100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin typedef int (*perf_lock_release_t)(int); 101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin public: 102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin perf_control(); 103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ~perf_control(); 104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void send_hint_to_mpctl(bool state); 105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin private: 106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int m_perf_handle; 107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *m_perf_lib; 108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool load_lib(); 109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin perf_lock_acquire_t m_perf_lock_acquire; 110e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin perf_lock_release_t m_perf_lock_release; 111e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 112e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin perf_control m_perf_control; 113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 115e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _UBWC_ 116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin #define QOMX_DEFAULT_COLOR_FMT QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed 117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin #define V4L2_DEFAULT_OUTPUT_COLOR_FMT V4L2_PIX_FMT_NV12_UBWC 118e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else 119e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin #define QOMX_DEFAULT_COLOR_FMT QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m 120e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin #define V4L2_DEFAULT_OUTPUT_COLOR_FMT V4L2_PIX_FMT_NV12 121e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //__OMX_VENC__H 123