/*--------------------------------------------------------------------------
Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of Code Aurora nor
      the names of its contributors may be used to endorse or promote
      products derived from this software without specific prior written
      permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------*/

#ifndef __EXTRA_DATA_HANDLER_H__
#define __EXTRA_DATA_HANDLER_H__

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "OMX_QCOMExtns.h"
#include<linux/msm_vidc_dec.h>
#include<linux/msm_vidc_enc.h>


#ifdef _ANDROID_
extern "C"{
#include<utils/Log.h>
}
#ifdef ENABLE_DEBUG_LOW
#define DEBUG_PRINT_LOW ALOGV
#else
#define DEBUG_PRINT_LOW
#endif
#ifdef ENABLE_DEBUG_HIGH
#define DEBUG_PRINT_HIGH ALOGV
#else
#define DEBUG_PRINT_HIGH
#endif
#ifdef ENABLE_DEBUG_ERROR
#define DEBUG_PRINT_ERROR ALOGE
#else
#define DEBUG_PRINT_ERROR
#endif

#else //_ANDROID_
#define DEBUG_PRINT_LOW printf
#define DEBUG_PRINT_HIGH printf
#define DEBUG_PRINT_ERROR printf
#endif // _ANDROID_

#define SEI_PAYLOAD_FRAME_PACKING_ARRANGEMENT 0x2D
#define H264_START_CODE 0x01
#define NAL_TYPE_SEI 0x06
#define VDEC_OMX_SEI 0x7F000007
#define FRAME_PACK_SIZE 18
#define H264_EMULATION_BYTE 0x03
class extra_data_handler
{
public:
  extra_data_handler();
  ~extra_data_handler();
  OMX_U32 parse_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr);
  OMX_U32 create_extra_data(OMX_BUFFERHEADERTYPE *buf_hdr);
  OMX_U32 get_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack);
  OMX_U32 set_frame_pack_data(OMX_QCOM_FRAME_PACK_ARRANGEMENT *frame_pack);
private:
  OMX_QCOM_FRAME_PACK_ARRANGEMENT frame_packing_arrangement;
  OMX_U8 *rbsp_buf;
  OMX_U32 bit_ptr;
  OMX_U32 byte_ptr;
  OMX_U32 pack_sei;
  OMX_U32 sei_payload_type;
  OMX_U32 d_u(OMX_U32 num_bits);
  OMX_U32 d_ue();
  OMX_U32 parse_frame_pack(OMX_U32 payload_size);
  OMX_S32 parse_rbsp(OMX_U8 *buf, OMX_U32 len);
  OMX_S32 parse_sei(OMX_U8 *buffer, OMX_U32 buffer_length);
  OMX_U32 e_u(OMX_U32 symbol, OMX_U32 num_bits);
  OMX_U32 e_ue(OMX_U32 symbol);
  OMX_U32 create_frame_pack();
  OMX_S32 create_rbsp(OMX_U8 *buf, OMX_U32 nalu_type);
  OMX_U32 create_sei(OMX_U8 *buffer);
  OMX_S32 parse_sliceinfo(OMX_BUFFERHEADERTYPE *pBufHdr,
     OMX_OTHER_EXTRADATATYPE *pExtra);
};

#endif
