161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan/*-------------------------------------------------------------------------- 261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCopyright (c) 2010-2013, The Linux Foundation. All rights reserved. 361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanRedistribution and use in source and binary forms, with or without 561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanmodification, are permitted provided that the following conditions are met: 661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Redistributions of source code must retain the above copyright 761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan notice, this list of conditions and the following disclaimer. 861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Redistributions in binary form must reproduce the above copyright 961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan notice, this list of conditions and the following disclaimer in the 1061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan documentation and/or other materials provided with the distribution. 1161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Neither the name of The Linux Foundation nor 1261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan the names of its contributors may be used to endorse or promote 1361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan products derived from this software without specific prior written 1461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan permission. 1561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1961a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2361a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan--------------------------------------------------------------------------*/ 2861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef __OMX_VENC_DEV__ 2961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define __OMX_VENC_DEV__ 3061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "OMX_Types.h" 3261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "OMX_Core.h" 3361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "OMX_QCOMExtns.h" 3461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "qc_omx_component.h" 3561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "omx_video_common.h" 3661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <linux/msm_vidc_enc.h> 3761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <pthread.h> 3861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <linux/videodev2.h> 3961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <poll.h> 4061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define TIMEOUT 5000 4161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_RECON_BUFFERS 4 4261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid* async_venc_message_thread (void *); 4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass venc_dev 4661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 4761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_dev(class omx_venc *venc_class); //constructor 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~venc_dev(); //des 5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 5161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_open(OMX_U32); 5261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void venc_close(); 5361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_stop(void); 5461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_pause(void); 5561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_start(void); 5661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_flush(unsigned); 5761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_ 5861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_meta_mode(bool); 5961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_resume(void); 6161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_start_done(void); 6261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_set_message_thread_id(pthread_t); 6361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_use_buf(void*, unsigned,unsigned); 6461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_free_buf(void*, unsigned); 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_empty_buf(void *, void *,unsigned,unsigned); 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_fill_buf(void *, void *,unsigned,unsigned); 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_get_buf_req(unsigned long *,unsigned long *, 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *,unsigned long); 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_buf_req(unsigned long *,unsigned long *, 7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long *,unsigned long); 7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_param(void *,OMX_INDEXTYPE); 7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_config(void *configData, OMX_INDEXTYPE index); 7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel); 7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_max_allowed_bitrate_check(OMX_U32 nTargetBitrate); 76f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_get_seq_hdr(void *, unsigned, unsigned *); 7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_start(void); 7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_stop(void); 7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_start_done(void); 8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_stop_done(void); 818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_output_log_flag(); 828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int venc_output_log_buffers(const char *buffer_addr, int buffer_len); 838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int venc_input_log_buffers(OMX_BUFFERHEADERTYPE *buffer, void* pmem_data_buf, int framelen); 848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int venc_extradata_log_buffers(char *buffer_addr); 8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_get_capability_ltrcount(OMX_U32 *, OMX_U32 *, OMX_U32 *); 8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_nDriver_fd; 8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_profile_set; 8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_level_set; 8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t loaded_start_stop_mlock; 9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_t loaded_start_stop_cond; 918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct venc_debug_cap m_debug; 9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct recon_buffer { 9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* virtual_address; 9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 9661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 9761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int alignment; 9861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 9961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef USE_ION 10061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int ion_device_fd; 10161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_allocation_data alloc_data; 10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data ion_alloc_fd; 10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan recon_buffer recon_buff[MAX_RECON_BUFFERS]; 10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int recon_buffers_count; 10861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_max_allowed_bitrate_check; 10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_eProfile; 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_eLevel; 11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int etb_count; 11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_basecfg m_sVenc_cfg; 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ratectrlcfg rate_ctrl; 11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_targetbitrate bitrate; 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intraperiod intra_period; 11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_profile codec_profile; 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ven_profilelevel profile_level; 11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_switch set_param; 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_voptimingcfg time_inc; 12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_allocatorproperty m_sInput_buff_property; 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_allocatorproperty m_sOutput_buff_property; 12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_sessionqp session_qp; 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_qprange qp_range; 12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_multiclicecfg multislice; 12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_entropycfg entropy; 12761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_dbcfg dbkfilter; 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_intrarefresh intra_refresh; 12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_headerextension hec; 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_voptimingcfg voptimecfg; 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_seqheader seqhdr; 13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ltrmode ltrmode; 13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ltrcount ltrcount; 13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ltrperiod ltrperiod; 13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel); 13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames); 13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_target_bitrate(OMX_U32 nTargetBitrate, OMX_U32 config); 13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ratectrl_cfg(OMX_VIDEO_CONTROLRATETYPE eControlRate); 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_qp_range(OMX_U32 min_qp, OMX_U32 max_qp); 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_session_qp(OMX_U32 i_frame_qp, OMX_U32 p_frame_qp); 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_extradata(OMX_U32 extra_data); 14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_encode_framerate(OMX_U32 encode_framerate, OMX_U32 config); 14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_vop_refresh(OMX_BOOL intra_vop_refresh); 14561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_color_format(OMX_COLOR_FORMATTYPE color_format); 14661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel); 14761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_multislice_cfg(OMX_INDEXTYPE codec, OMX_U32 slicesize); 14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_entropy_config(OMX_BOOL enable, OMX_U32 i_cabac_level); 14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_inloop_filter(OMX_VIDEO_AVCLOOPFILTERTYPE loop_filter); 15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_refresh (OMX_VIDEO_INTRAREFRESHTYPE intrarefresh, OMX_U32 nMBs); 15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_error_resilience(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* error_resilience); 15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_voptiming_cfg(OMX_U32 nTimeIncRes); 15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void venc_config_print(); 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_slice_delivery_mode(OMX_BOOL enable); 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_plusptype(OMX_BOOL enable); 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ltrmode(QOMX_VIDEO_LTRMODETYPE mode); 15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ltrcount(OMX_U32 count); 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ltrperiod(OMX_U32 period); 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ltruse(OMX_U32 id, OMX_U32 frames); 160c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan bool venc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width, OMX_U32 height); 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_1080P 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_free(); 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_allocate(OMX_U32 size, OMX_U32 alignment, OMX_U32 count); 16461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 venc_allocate_recon_buffers(); 16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline int clip2(int x) { 16661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x -1; 16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 1; 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 2; 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 4; 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 16; 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x + 1; 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return x; 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 178