1826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*--------------------------------------------------------------------------
2dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandCopyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
3826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevRedistribution and use in source and binary forms, with or without
5826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevmodification, are permitted provided that the following conditions are met:
6826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    * Redistributions of source code must retain the above copyright
7826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      notice, this list of conditions and the following disclaimer.
8826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    * Redistributions in binary form must reproduce the above copyright
9826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      notice, this list of conditions and the following disclaimer in the
10826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      documentation and/or other materials provided with the distribution.
11dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand    * Neither the name of Code Aurora nor
12826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      the names of its contributors may be used to endorse or promote
13826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      products derived from this software without specific prior written
14826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      permission.
15826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
16826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev--------------------------------------------------------------------------*/
28826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
29826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef __EXTRA_DATA_HANDLER_H__
30826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define __EXTRA_DATA_HANDLER_H__
31826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
32826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdio.h>
33826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdint.h>
34826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <string.h>
35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdlib.h>
36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_QCOMExtns.h"
37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include<linux/msm_vidc_dec.h>
38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include<linux/msm_vidc_enc.h>
39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
41826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
42826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevextern "C"{
43826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include<utils/Log.h>
44826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef ENABLE_DEBUG_LOW
46dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#define DEBUG_PRINT_LOW ALOGV
47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef ENABLE_DEBUG_HIGH
51dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#define DEBUG_PRINT_HIGH ALOGV
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH
54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef ENABLE_DEBUG_ERROR
56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR ALOGE
57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
58826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR
59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
60826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
61826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW printf
63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH printf
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR printf
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif // _ANDROID_
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define SEI_PAYLOAD_FRAME_PACKING_ARRANGEMENT 0x2D
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_START_CODE 0x01
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define NAL_TYPE_SEI 0x06
70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define VDEC_OMX_SEI 0x7F000007
71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define FRAME_PACK_SIZE 18
72826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_EMULATION_BYTE 0x03
736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalclass extra_data_handler
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
75826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevpublic:
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  extra_data_handler();
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  ~extra_data_handler();
78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 parse_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr);
79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 create_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr);
80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 get_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack);
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 set_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack);
82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevprivate:
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_QCOM_FRAME_PACK_ARRANGEMENT frame_packing_arrangement;
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U8 *rbsp_buf;
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 bit_ptr;
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 byte_ptr;
87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 pack_sei;
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 sei_payload_type;
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 d_u(OMX_U32 num_bits);
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 d_ue();
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 parse_frame_pack(OMX_U32 payload_size);
92826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_S32 parse_rbsp(OMX_U8 *buf, OMX_U32 len);
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_S32 parse_sei(OMX_U8 *buffer, OMX_U32 buffer_length);
94826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 e_u(OMX_U32 symbol, OMX_U32 num_bits);
95826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 e_ue(OMX_U32 symbol);
96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 create_frame_pack();
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_S32 create_rbsp(OMX_U8 *buf, OMX_U32 nalu_type);
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 create_sei(OMX_U8 *buffer);
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_S32 parse_sliceinfo(OMX_BUFFERHEADERTYPE *pBufHdr,
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev     OMX_OTHER_EXTRADATATYPE *pExtra);
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
1036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
104