1826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*-------------------------------------------------------------------------- 28767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanCopyright (c) 2010-2014, The Linux Foundation. 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. 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation 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#endif // _ANDROID_ 46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h" 48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define SEI_PAYLOAD_FRAME_PACKING_ARRANGEMENT 0x2D 49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_START_CODE 0x01 50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define NAL_TYPE_SEI 0x06 51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define VDEC_OMX_SEI 0x7F000007 52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define FRAME_PACK_SIZE 18 53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define H264_EMULATION_BYTE 0x03 546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalclass extra_data_handler 55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan public: 578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan extra_data_handler(); 588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ~extra_data_handler(); 598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 parse_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr); 608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 create_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr); 618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 get_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack); 628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 set_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack); 638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan private: 648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_FRAME_PACK_ARRANGEMENT frame_packing_arrangement; 658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U8 *rbsp_buf; 668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 bit_ptr; 678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 byte_ptr; 688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 pack_sei; 698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 sei_payload_type; 708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 d_u(OMX_U32 num_bits); 718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 d_ue(); 728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 parse_frame_pack(void); 738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_S32 parse_rbsp(OMX_U8 *buf, OMX_U32 len); 748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_S32 parse_sei(OMX_U8 *buffer, OMX_U32 buffer_length); 758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 e_u(OMX_U32 symbol, OMX_U32 num_bits); 768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 e_ue(OMX_U32 symbol); 778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 create_frame_pack(); 788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_S32 create_rbsp(OMX_U8 *buf, OMX_U32 nalu_type); 798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 create_sei(OMX_U8 *buffer); 808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_S32 parse_sliceinfo(OMX_BUFFERHEADERTYPE *pBufHdr, 818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_OTHER_EXTRADATATYPE *pExtra); 828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_S32 parse_ltrinfo(OMX_OTHER_EXTRADATATYPE *pExtra); 83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 86