Home | History | Annotate | Download | only in parser
      1 #include "viddec_pm.h"
      2 #include "viddec_fw_debug.h"
      3 #include "viddec_parser_ops.h"
      4 #include "viddec_emitter.h"
      5 #include "viddec_fw_workload.h"
      6 #include "viddec_pm_utils_bstream.h"
      7 
      8 extern void viddec_pm_utils_list_emit_pixel_tags(viddec_pm_utils_list_t *list, uint32_t start, viddec_emitter *emitter, uint32_t using_next);
      9 extern void viddec_pm_utils_list_emit_slice_tags(viddec_pm_utils_list_t *list, uint32_t start, uint32_t end, viddec_emitter *emitter, uint32_t is_cur_wkld, viddec_workload_item_t *wi);
     10 
     11 int32_t viddec_pm_get_bits(void *parent, uint32_t *data, uint32_t num_bits)
     12 {
     13     int32_t ret = 1;
     14     viddec_pm_cxt_t *cxt;
     15 
     16     cxt = (viddec_pm_cxt_t *)parent;
     17     ret = viddec_pm_utils_bstream_peekbits(&(cxt->getbits), data, num_bits, 1);
     18     if(ret == -1)
     19     {DEB("FAILURE!!!! getbits returned %d\n", ret);}
     20 
     21     return ret;
     22 }
     23 
     24 int32_t viddec_pm_peek_bits(void *parent, uint32_t *data, uint32_t num_bits)
     25 {
     26     int32_t ret = 1;
     27     viddec_pm_cxt_t *cxt;
     28 
     29     cxt = (viddec_pm_cxt_t *)parent;
     30     ret = viddec_pm_utils_bstream_peekbits(&(cxt->getbits), data, num_bits, 0);
     31     return ret;
     32 }
     33 
     34 int32_t viddec_pm_skip_bits(void *parent, uint32_t num_bits)
     35 {
     36     int32_t ret = 1;
     37     viddec_pm_cxt_t *cxt;
     38 
     39     cxt = (viddec_pm_cxt_t *)parent;
     40     ret = viddec_pm_utils_bstream_skipbits(&(cxt->getbits), num_bits);
     41     return ret;
     42 }
     43 
     44 int32_t viddec_pm_append_workitem(void *parent, viddec_workload_item_t *item)
     45 {
     46     int32_t ret = 1;
     47     viddec_pm_cxt_t *cxt;
     48 
     49     cxt = (viddec_pm_cxt_t *)parent;
     50     ret = viddec_emit_append(&(cxt->emitter.cur), item);
     51     return ret;
     52 }
     53 
     54 int32_t viddec_pm_append_workitem_next(void *parent, viddec_workload_item_t *item)
     55 {
     56     int32_t ret = 1;
     57     viddec_pm_cxt_t *cxt;
     58 
     59     cxt = (viddec_pm_cxt_t *)parent;
     60     ret = viddec_emit_append(&(cxt->emitter.next), item);
     61     return ret;
     62 }
     63 
     64 int32_t viddec_pm_get_au_pos(void *parent, uint32_t *bit, uint32_t *byte, uint8_t *is_emul)
     65 {
     66     int32_t ret = 1;
     67     viddec_pm_cxt_t *cxt;
     68 
     69     cxt = (viddec_pm_cxt_t *)parent;
     70     viddec_pm_utils_bstream_get_au_offsets(&(cxt->getbits), bit, byte, is_emul);
     71 
     72     return ret;
     73 
     74 }
     75 
     76 static inline int32_t viddec_pm_append_restof_pixel_data(void *parent, uint32_t cur_wkld)
     77 {
     78     int32_t ret = 1;
     79     viddec_pm_cxt_t *cxt;
     80     uint32_t start=0, b_off=0;
     81     uint8_t emul=0;
     82     viddec_workload_item_t wi;
     83 
     84     cxt = (viddec_pm_cxt_t *)parent;
     85     viddec_pm_utils_bstream_get_au_offsets(&(cxt->getbits), &b_off, &start, &emul);
     86     if(emul) start--;
     87 
     88     wi.vwi_type = VIDDEC_WORKLOAD_PIXEL_ES;
     89     wi.es.es_flags = 0;
     90     viddec_pm_utils_list_emit_slice_tags(&(cxt->list), start, cxt->list.total_bytes -1, &(cxt->emitter), cur_wkld, &wi);
     91     return ret;
     92 }
     93 
     94 int32_t viddec_pm_append_pixeldata(void *parent)
     95 {
     96     return viddec_pm_append_restof_pixel_data(parent,  1);
     97 }
     98 
     99 int32_t viddec_pm_append_pixeldata_next(void *parent)
    100 {
    101     return viddec_pm_append_restof_pixel_data(parent,  0);
    102 }
    103 
    104 viddec_workload_t* viddec_pm_get_header(void *parent)
    105 {
    106     viddec_pm_cxt_t *cxt;
    107 
    108     cxt = (viddec_pm_cxt_t *)parent;
    109 
    110     return cxt->emitter.cur.data;
    111 }
    112 
    113 viddec_workload_t* viddec_pm_get_next_header(void *parent)
    114 {
    115     viddec_pm_cxt_t *cxt;
    116 
    117     cxt = (viddec_pm_cxt_t *)parent;
    118 
    119     return cxt->emitter.next.data;
    120 }
    121 
    122 int32_t viddec_pm_is_nomoredata(void *parent)
    123 {
    124     int32_t ret=0;
    125     viddec_pm_cxt_t *cxt;
    126 
    127     cxt = (viddec_pm_cxt_t *)parent;
    128     ret = viddec_pm_utils_bstream_nomorerbspdata(&(cxt->getbits));
    129     return ret;
    130 }
    131 
    132 uint32_t viddec_pm_get_cur_byte(void *parent, uint8_t *byte)
    133 {
    134     int32_t ret=-1;
    135     viddec_pm_cxt_t *cxt;
    136 
    137     cxt = (viddec_pm_cxt_t *)parent;
    138     ret = viddec_pm_utils_bstream_get_current_byte(&(cxt->getbits), byte);
    139     return ret;
    140 }
    141 
    142 int32_t viddec_pm_append_misc_tags(void *parent, uint32_t start, uint32_t end, viddec_workload_item_t *wi, uint32_t using_next)
    143 {
    144     int32_t ret = 1;
    145     viddec_pm_cxt_t *cxt;
    146 
    147     cxt = (viddec_pm_cxt_t *)parent;
    148     if (end == VIDDEC_PARSE_INVALID_POS) end = (cxt->list.total_bytes -1);
    149     viddec_pm_utils_list_emit_slice_tags(&(cxt->list), start, end, &(cxt->emitter), using_next, wi);
    150 
    151     return ret;
    152 
    153 }
    154 
    155 void viddec_pm_set_next_frame_error_on_eos(void *parent, uint32_t error)
    156 {
    157     viddec_pm_cxt_t *cxt;
    158     cxt = (viddec_pm_cxt_t *)parent;
    159     cxt->next_workload_error_eos = error;
    160 }
    161 
    162 void viddec_pm_set_late_frame_detect(void *parent)
    163 {
    164     viddec_pm_cxt_t *cxt;
    165     cxt = (viddec_pm_cxt_t *)parent;
    166     cxt->late_frame_detect = true;
    167 }
    168 
    169 void viddec_pm_setup_userdata(viddec_workload_item_t *wi)
    170 {
    171 #ifdef  MFDBIGENDIAN
    172     wi->vwi_payload[0] = SWAP_WORD(wi->vwi_payload[0]);
    173     wi->vwi_payload[1] = SWAP_WORD(wi->vwi_payload[1]);
    174     wi->vwi_payload[2] = SWAP_WORD(wi->vwi_payload[2]);
    175 #else
    176     wi=wi;
    177 #endif
    178 }
    179