1 /* 2 INTEL CONFIDENTIAL 3 Copyright 2009 Intel Corporation All Rights Reserved. 4 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. 5 6 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. 7 */ 8 9 #ifndef VBP_UTILS_H 10 #define VBP_UTILS_H 11 12 #include "viddec_parser_ops.h" 13 #include "viddec_pm_parse.h" 14 #include "viddec_pm.h" 15 #include "vbp_trace.h" 16 17 #define MAGIC_NUMBER 0x0DEADBEEF 18 #define MAX_WORKLOAD_ITEMS 1000 19 20 /* maximum 256 slices per sample buffer */ 21 #define MAX_NUM_SLICES 256 22 23 /* maximum two pictures per sample buffer */ 24 #define MAX_NUM_PICTURES 2 25 26 27 extern uint32 viddec_parse_sc(void *in, void *pcxt, void *sc_state); 28 29 /* rolling counter of sample buffer */ 30 extern uint32 buffer_counter; 31 32 typedef struct vbp_context_t vbp_context; 33 34 typedef uint32 (*function_init_parser_entries)(vbp_context* cxt); 35 typedef uint32 (*function_allocate_query_data)(vbp_context* cxt); 36 typedef uint32 (*function_free_query_data)(vbp_context* cxt); 37 typedef uint32 (*function_parse_init_data)(vbp_context* cxt); 38 typedef uint32 (*function_parse_start_code)(vbp_context* cxt); 39 typedef uint32 (*function_process_parsing_result)(vbp_context* cxt, int i); 40 typedef uint32 (*function_populate_query_data)(vbp_context* cxt); 41 42 43 44 struct vbp_context_t 45 { 46 /* magic number */ 47 uint32 identifier; 48 49 /* parser type, eg, MPEG-2, MPEG-4, H.264, VC1 */ 50 uint32 parser_type; 51 52 /* handle to parser (shared object) */ 53 void *fd_parser; 54 55 /* parser (shared object) entry points */ 56 viddec_parser_ops_t *parser_ops; 57 58 /* parser context */ 59 viddec_pm_cxt_t *parser_cxt; 60 61 /* work load */ 62 viddec_workload_t *workload1, *workload2; 63 64 /* persistent memory for parser */ 65 uint32 *persist_mem; 66 67 /* format specific query data */ 68 void *query_data; 69 70 71 function_init_parser_entries func_init_parser_entries; 72 function_allocate_query_data func_allocate_query_data; 73 function_free_query_data func_free_query_data; 74 function_parse_init_data func_parse_init_data; 75 function_parse_start_code func_parse_start_code; 76 function_process_parsing_result func_process_parsing_result; 77 function_populate_query_data func_populate_query_data; 78 79 }; 80 81 /** 82 * create VBP context 83 */ 84 uint32 vbp_utils_create_context(uint32 parser_type, vbp_context **ppcontext); 85 86 /* 87 * destroy VBP context 88 */ 89 uint32 vbp_utils_destroy_context(vbp_context *pcontext); 90 91 /* 92 * parse bitstream 93 */ 94 uint32 vbp_utils_parse_buffer(vbp_context *pcontext, uint8 *data, uint32 size, uint8 init_data_flag); 95 96 /* 97 * query parsing result 98 */ 99 uint32 vbp_utils_query(vbp_context *pcontext, void **data); 100 101 /* 102 * flush un-parsed bitstream 103 */ 104 uint32 vbp_utils_flush(vbp_context *pcontext); 105 106 #endif /* VBP_UTILS_H */ 107