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