| #ifndef VIDDEC_PM_H |
| #define VIDDEC_PM_H |
| |
| #include <stdint.h> |
| #include "viddec_pm_utils_bstream.h" |
| #include "viddec_pm_parse.h" |
| #include "viddec_parser_ops.h" |
| |
| #define SC_DETECT_BUF_SIZE 1024 |
| #define MAX_CODEC_CXT_SIZE 4096 |
| |
| typedef enum |
| { |
| PM_SUCCESS = 0, |
| /* Messages to indicate more ES data */ |
| PM_NO_DATA = 0x100, |
| /* Messages to indicate SC found */ |
| PM_SC_FOUND = 0x200, |
| PM_FIRST_SC_FOUND = 0x201, |
| /* Messages to indicate Frame done */ |
| PM_WKLD_DONE = 0x300, |
| /* Messages to indicate Error conditions */ |
| PM_OVERFLOW = 0x400, |
| /* Messages to indicate inband conditions */ |
| PM_INBAND_MESSAGES = 0x500, |
| PM_EOS = 0x501, |
| PM_DISCONTINUITY = 0x502, |
| } pm_parse_state_t; |
| |
| /* This is a temporary structure for first pass sc parsing. index tells us where we are in list of es buffers |
| cur_es points to current es buffer we are parsing. */ |
| typedef struct |
| { |
| int32_t list_index; /* current index of list */ |
| uint32_t cur_offset; |
| uint32_t cur_size; |
| viddec_input_buffer_t *cur_es; |
| } viddec_pm_sc_cur_buf_t; |
| |
| typedef struct |
| { |
| uint32_t pending_tags[MAX_IBUFS_PER_SC]; |
| uint8_t dummy; |
| uint8_t frame_done; |
| uint8_t first_buf_aligned; |
| uint8_t using_next; |
| } vidded_pm_pending_tags_t; |
| |
| /* This structure holds all necessary data required by parser manager for stream parsing. |
| */ |
| typedef struct |
| { |
| /* Actual buffer where data gets DMA'd. 8 padding bytes for alignment */ |
| uint8_t scbuf[SC_DETECT_BUF_SIZE + 8]; |
| viddec_sc_parse_cubby_cxt_t parse_cubby; |
| viddec_pm_utils_list_t list; |
| /* Place to store tags to be added to next to next workload */ |
| viddec_pm_sc_cur_buf_t cur_buf; |
| //viddec_emitter emitter; |
| viddec_pm_utils_bstream_cxt_t getbits; |
| viddec_sc_prefix_state_t sc_prefix_info; |
| vidded_pm_pending_tags_t pending_tags; |
| uint8_t word_align_dummy; |
| uint8_t late_frame_detect; |
| uint8_t frame_start_found; |
| uint8_t found_fm_st_in_current_au; |
| uint32_t next_workload_error_eos; |
| uint32_t pending_inband_tags; |
| #ifdef VBP |
| uint32_t codec_data[MAX_CODEC_CXT_SIZE<<3]; |
| #else |
| uint32_t codec_data[MAX_CODEC_CXT_SIZE>>2]; |
| #endif |
| } viddec_pm_cxt_t; |
| |
| /* |
| * |
| * Functions used by Parser kernel |
| * |
| */ |
| |
| /* This is for initialising parser manager context to default values */ |
| void viddec_pm_init_context(viddec_pm_cxt_t *cxt, uint32_t codec_type, uint32_t *persist_mem, uint32_t clean); |
| |
| /* This is the main parse function which returns state information that parser kernel can understand.*/ |
| uint32_t viddec_pm_parse_es_buffer(viddec_pm_cxt_t *cxt, uint32_t codec_type, viddec_input_buffer_t *es_buf); |
| |
| void viddec_pm_init_ops(); |
| |
| void viddec_pm_update_time(viddec_pm_cxt_t *cxt, uint32_t time); |
| |
| uint32_t viddec_pm_get_parser_sizes(uint32_t codec_type, viddec_parser_memory_sizes_t *size); |
| #endif |