blob: 69202f85314b89c0ba9cdec994e6f82d46346288 [file] [log] [blame]
/*
INTEL CONFIDENTIAL
Copyright 2009 Intel Corporation All Rights Reserved.
The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
*/
#ifndef VBP_UTILS_H
#define VBP_UTILS_H
#include "viddec_parser_ops.h"
#include "viddec_pm_parse.h"
#include "viddec_pm.h"
#include "vbp_trace.h"
#define MAGIC_NUMBER 0x0DEADBEEF
#define MAX_WORKLOAD_ITEMS 1000
/* maximum 256 slices per sample buffer */
#define MAX_NUM_SLICES 256
/* maximum two pictures per sample buffer */
#define MAX_NUM_PICTURES 2
extern uint32 viddec_parse_sc(void *in, void *pcxt, void *sc_state);
/* rolling counter of sample buffer */
extern uint32 buffer_counter;
typedef struct vbp_context_t vbp_context;
typedef uint32 (*function_init_parser_entries)(vbp_context* cxt);
typedef uint32 (*function_allocate_query_data)(vbp_context* cxt);
typedef uint32 (*function_free_query_data)(vbp_context* cxt);
typedef uint32 (*function_parse_init_data)(vbp_context* cxt);
typedef uint32 (*function_parse_start_code)(vbp_context* cxt);
typedef uint32 (*function_process_parsing_result)(vbp_context* cxt, int i);
typedef uint32 (*function_populate_query_data)(vbp_context* cxt);
struct vbp_context_t
{
/* magic number */
uint32 identifier;
/* parser type, eg, MPEG-2, MPEG-4, H.264, VC1 */
uint32 parser_type;
/* handle to parser (shared object) */
void *fd_parser;
/* parser (shared object) entry points */
viddec_parser_ops_t *parser_ops;
/* parser context */
viddec_pm_cxt_t *parser_cxt;
/* work load */
viddec_workload_t *workload1, *workload2;
/* persistent memory for parser */
uint32 *persist_mem;
/* format specific query data */
void *query_data;
function_init_parser_entries func_init_parser_entries;
function_allocate_query_data func_allocate_query_data;
function_free_query_data func_free_query_data;
function_parse_init_data func_parse_init_data;
function_parse_start_code func_parse_start_code;
function_process_parsing_result func_process_parsing_result;
function_populate_query_data func_populate_query_data;
#ifdef ANDROID
uint32 h264_frame_flag;
#endif
};
/**
* create VBP context
*/
uint32 vbp_utils_create_context(uint32 parser_type, vbp_context **ppcontext);
/*
* destroy VBP context
*/
uint32 vbp_utils_destroy_context(vbp_context *pcontext);
/*
* parse bitstream
*/
uint32 vbp_utils_parse_buffer(vbp_context *pcontext, uint8 *data, uint32 size, uint8 init_data_flag);
/*
* query parsing result
*/
uint32 vbp_utils_query(vbp_context *pcontext, void **data);
/*
* flush un-parsed bitstream
*/
uint32 vbp_utils_flush(vbp_context *pcontext);
#endif /* VBP_UTILS_H */