1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef VIDDEC_PARSER_OPS_H 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VIDDEC_PARSER_OPS_H 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "viddec_fw_workload.h" 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define VIDDEC_PARSE_INVALID_POS 0xFFFFFFFF 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_PARSE_EOS = 0x0FFF, /* Dummy start code to force EOS */ 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_PARSE_DISCONTINUITY, /* Dummy start code to force completion and flush */ 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}viddec_parser_inband_messages_t; 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t context_size; 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t persist_size; 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}viddec_parser_memory_sizes_t; 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void (*init)(void *ctxt, uint32_t *persist, uint32_t preserve); 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*parse_sc) (void *ctxt, void *pcxt, void *sc_state); 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*parse_syntax) (void *parent, void *ctxt); 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void (*get_cxt_size) (viddec_parser_memory_sizes_t *size); 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*is_wkld_done)(void *parent, void *ctxt, uint32_t next_sc, uint32_t *codec_specific_errors); 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*is_frame_start)(void *ctxt); 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*gen_contrib_tags)(void *parent, uint32_t ignore_partial); 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee uint32_t (*gen_assoc_tags)(void *parent); 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}viddec_parser_ops_t; 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef enum 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_PARSE_ERROR = 0xF0, 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_PARSE_SUCESS = 0xF1, 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VIDDEC_PARSE_FRMDONE = 0xF2, 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}viddec_parser_error_t; 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *Functions used by Parsers 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function returns the requested number of bits(<=32) and increments au byte position. 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_get_bits(void *parent, uint32_t *data, uint32_t num_bits); 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function returns requested number of bits(<=32) with out incrementing au byte position 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_peek_bits(void *parent, uint32_t *data, uint32_t num_bits); 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function skips requested number of bits(<=32) by incrementing au byte position. 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_skip_bits(void *parent, uint32_t num_bits); 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function appends a work item to current workload. 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_append_workitem(void *parent, viddec_workload_item_t *item); 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function appends a work item to next workload. 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_append_workitem_next(void *parent, viddec_workload_item_t *item); 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function gets current byte and bit positions and information on whether an emulation byte is present after 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.leecurrent byte. 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_get_au_pos(void *parent, uint32_t *bit, uint32_t *byte, unsigned char *is_emul); 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function appends Pixel tag to current work load starting from current position to end of au unit. 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_append_pixeldata(void *parent); 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function appends Pixel tag to next work load starting from current position to end of au unit. 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_append_pixeldata_next(void *parent); 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function provides the workload header for pasers to fill in attribute values 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeviddec_workload_t* viddec_pm_get_header(void *parent); 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function provides the next workload header for pasers to fill in attribute values 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeviddec_workload_t* viddec_pm_get_next_header(void *parent); 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Returns the current byte value where offset is on */ 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeuint32_t viddec_pm_get_cur_byte(void *parent, uint8_t *byte); 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Tells us if there is more data that need to parse */ 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_is_nomoredata(void *parent); 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* This function appends misc tag to work load starting from start position to end position of au unit */ 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeint32_t viddec_pm_append_misc_tags(void *parent, uint32_t start, uint32_t end, viddec_workload_item_t *wi, uint32_t using_next); 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid viddec_pm_set_next_frame_error_on_eos(void *parent, uint32_t error); 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid viddec_pm_set_late_frame_detect(void *parent); 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic inline void viddec_fw_reset_workload_item(viddec_workload_item_t *wi) 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee wi->vwi_payload[0] = wi->vwi_payload[1] = wi->vwi_payload[2] = 0; 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid viddec_pm_setup_userdata(viddec_workload_item_t *wi); 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif 107