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