| #ifndef VIDDEC_PM_COMMON_LIST_H |
| #define VIDDEC_PM_COMMON_LIST_H |
| |
| /* Limitation:This is the maximum numbers of es buffers between start codes. Needs to change if we encounter |
| a case if this is not sufficent */ |
| #ifdef VBP |
| #define MAX_IBUFS_PER_SC 512 |
| #else |
| #define MAX_IBUFS_PER_SC 64 |
| #endif |
| |
| /* This structure is for storing information on byte position in the current access unit. |
| stpos is the au byte index of first byte in current es buffer.edpos is the au byte index+1 of last |
| valid byte in current es buffer.*/ |
| typedef struct |
| { |
| uint32_t stpos; |
| uint32_t edpos; |
| } viddec_pm_utils_au_bytepos_t; |
| |
| /* this structure is for storing all necessary information for list handling */ |
| typedef struct |
| { |
| uint16_t num_items; /* Number of buffers in List */ |
| uint16_t first_scprfx_length; /* Length of first sc prefix in this list */ |
| int32_t start_offset; /* starting offset of unused data including sc prefix in first buffer */ |
| int32_t end_offset; /* Offset of unsused data in last buffer including 2nd sc prefix */ |
| //viddec_input_buffer_t sc_ibuf[MAX_IBUFS_PER_SC]; /* Place to store buffer descriptors */ |
| viddec_pm_utils_au_bytepos_t data[MAX_IBUFS_PER_SC]; /* place to store au byte positions */ |
| int32_t total_bytes; /* total bytes for current access unit including first sc prefix*/ |
| } viddec_pm_utils_list_t; |
| |
| /* This function initialises the list to default values */ |
| void viddec_pm_utils_list_init(viddec_pm_utils_list_t *cxt); |
| #ifndef VBP |
| /* This function adds a new entry to list and will emit tags if needed */ |
| uint32_t viddec_pm_utils_list_addbuf(viddec_pm_utils_list_t *list, viddec_input_buffer_t *es_buf); |
| |
| /* This function updates au byte position of the current list. This should be called after sc codes are detected and before |
| syntax parsing as get bits requires this to be initialized. */ |
| void viddec_pm_utils_list_updatebytepos(viddec_pm_utils_list_t *list, uint8_t sc_prefix_length); |
| |
| /* This function walks through the list and removes consumed buffers based on total bytes. It then moves |
| unused entires to the top of list. */ |
| void viddec_pm_utils_list_remove_used_entries(viddec_pm_utils_list_t *list, uint32_t length); |
| |
| /* this function returns 1 if the requested byte is not found. If found returns list and offset into list */ |
| uint32_t viddec_pm_utils_list_getbyte_position(viddec_pm_utils_list_t *list, uint32_t byte, uint32_t *list_index, uint32_t *offset); |
| #endif |
| #endif |