FFmpeg
Loading...
Searching...
No Matches
cavs.c File Reference

Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. More...

#include "libavutil/mem.h"
#include "avcodec.h"
#include "golomb.h"
#include "h264chroma.h"
#include "idctdsp.h"
#include "mathops.h"
#include "qpeldsp.h"
#include "cavs.h"

Go to the source code of this file.

Macros

#define SET_PARAMS
 
#define LOWPASS(ARRAY, INDEX)
 

Functions

static int get_bs (cavs_vector *mvP, cavs_vector *mvQ, int b)
 
void ff_cavs_filter (AVSContext *h, enum cavs_mb mb_type)
 in-loop deblocking filter for a single macroblock
 
void ff_cavs_load_intra_pred_luma (AVSContext *h, uint8_t *top, uint8_t **left, int block)
 
void ff_cavs_load_intra_pred_chroma (AVSContext *h)
 
static void intra_pred_vert (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_horiz (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_dc_128 (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_plane (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_lp (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_down_left (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_down_right (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_lp_left (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void intra_pred_lp_top (uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
 
static void modify_pred (const int8_t *mod_table, int *mode)
 
void ff_cavs_modify_mb_i (AVSContext *h, int *pred_mode_uv)
 
static void mc_dir_part (AVSContext *h, AVFrame *pic, int parity, int chroma_height, int list, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int src_x_offset, int src_y_offset, qpel_mc_func *qpix_op, h264_chroma_mc_func chroma_op, cavs_vector *mv)
 
static void mc_part_std (AVSContext *h, int chroma_height, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int x_offset, int y_offset, qpel_mc_func *qpix_put, h264_chroma_mc_func chroma_put, qpel_mc_func *qpix_avg, h264_chroma_mc_func chroma_avg, cavs_vector *mv)
 
void ff_cavs_inter (AVSContext *h, enum cavs_mb mb_type)
 
static void scale_mv (AVSContext *h, int *d_x, int *d_y, cavs_vector *src, int distp)
 
static void mv_pred_median (AVSContext *h, cavs_vector *mvP, cavs_vector *mvA, cavs_vector *mvB, cavs_vector *mvC)
 
void ff_cavs_mv (AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC, enum cavs_mv_pred mode, enum cavs_block size, int ref)
 
void ff_cavs_set_mb_row (AVSContext *h)
 Point the macroblock sample pointers at macroblock row h->mby, addressed inside the macroblock's own field at the doubled stride (clause 7.2.3.1).
 
void ff_cavs_init_mb (AVSContext *h)
 initialise predictors for motion vectors and intra prediction
 
int ff_cavs_next_mb (AVSContext *h)
 save predictors for later macroblocks and increase macroblock address
 
int ff_cavs_init_pic (AVSContext *h)
 
int ff_cavs_init_top_lines (AVSContext *h)
 some predictions require data from the top-neighbouring macroblock.
 
av_cold int ff_cavs_init (AVCodecContext *avctx)
 
av_cold int ff_cavs_end (AVCodecContext *avctx)
 

Variables

static const uint8_t alpha_tab [64]
 
static const uint8_t beta_tab [64]
 
static const uint8_t tc_tab [64]
 
static const cavs_vector un_mv = { 0, 0, 1, NOT_AVAIL, 0 }
 mark block as unavailable, i.e.
 
static const uint8_t cavs_scan_field [64]
 Inverse block scan method 2 (clause 9.5.3 c), figure 23), for field coded pictures, as the inverse ff_permute_scantable() expects.
 
static const int8_t left_modifier_l [8] = { 0, -1, 6, -1, -1, 7, 6, 7 }
 
static const int8_t top_modifier_l [8] = { -1, 1, 5, -1, -1, 5, 7, 7 }
 
static const int8_t left_modifier_c [7] = { 5, -1, 2, -1, 6, 5, 6 }
 
static const int8_t top_modifier_c [7] = { 4, 1, -1, -1, 4, 6, 6 }
 

Detailed Description

Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder.

Author
Stefan Gehrer stefa.nosp@m.n.ge.nosp@m.hrer@.nosp@m.gmx..nosp@m.de

Definition in file cavs.c.

Macro Definition Documentation

◆ SET_PARAMS

#define SET_PARAMS
Value:
alpha = alpha_tab[av_clip_uintp2(qp_avg + h->alpha_offset, 6)]; \
beta = beta_tab[av_clip_uintp2(qp_avg + h->beta_offset, 6)]; \
tc = tc_tab[av_clip_uintp2(qp_avg + h->alpha_offset, 6)];
static const uint8_t tc_tab[64]
Definition cavs.c:51
static const uint8_t beta_tab[64]
Definition cavs.c:44
static const uint8_t alpha_tab[64]
Definition cavs.c:37
#define av_clip_uintp2
Definition common.h:124
static const int16_t alpha[]
Definition ilbcdata.h:55

Definition at line 103 of file cavs.c.

Referenced by ff_cavs_filter().

◆ LOWPASS

#define LOWPASS ( ARRAY,
INDEX )
Value:
((ARRAY[(INDEX) - 1] + 2 * ARRAY[(INDEX)] + ARRAY[(INDEX) + 1] + 2) >> 2)

Definition at line 314 of file cavs.c.

Referenced by config_input(), filter_frame(), intra_pred_down_left(), intra_pred_down_right(), intra_pred_lp(), intra_pred_lp_left(), intra_pred_lp_top(), and query_formats().

Function Documentation

◆ get_bs()

static int get_bs ( cavs_vector * mvP,
cavs_vector * mvQ,
int b )
inlinestatic

Definition at line 84 of file cavs.c.

Referenced by ff_cavs_filter().

◆ ff_cavs_filter()

void ff_cavs_filter ( AVSContext * h,
enum cavs_mb mb_type )

in-loop deblocking filter for a single macroblock

boundary strength (bs) mapping:

–4—5– 0 2 | | 6 | 7 |

1 3 |

Definition at line 119 of file cavs.c.

Referenced by decode_mb_b(), decode_mb_i(), and decode_mb_p().

◆ ff_cavs_load_intra_pred_luma()

void ff_cavs_load_intra_pred_luma ( AVSContext * h,
uint8_t * top,
uint8_t ** left,
int block )

Definition at line 195 of file cavs.c.

Referenced by decode_mb_i().

◆ ff_cavs_load_intra_pred_chroma()

void ff_cavs_load_intra_pred_chroma ( AVSContext * h)

Definition at line 246 of file cavs.c.

Referenced by decode_mb_i().

◆ intra_pred_vert()

static void intra_pred_vert ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 269 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_horiz()

static void intra_pred_horiz ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 277 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_dc_128()

static void intra_pred_dc_128 ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 287 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_plane()

static void intra_pred_plane ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 295 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_lp()

static void intra_pred_lp ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 317 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_down_left()

static void intra_pred_down_left ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 325 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_down_right()

static void intra_pred_down_right ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 333 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_lp_left()

static void intra_pred_lp_left ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 346 of file cavs.c.

Referenced by ff_cavs_init().

◆ intra_pred_lp_top()

static void intra_pred_lp_top ( uint8_t * d,
uint8_t * top,
uint8_t * left,
ptrdiff_t stride )
static

Definition at line 354 of file cavs.c.

Referenced by ff_cavs_init().

◆ modify_pred()

static void modify_pred ( const int8_t * mod_table,
int * mode )
inlinestatic

Definition at line 364 of file cavs.c.

Referenced by ff_cavs_modify_mb_i().

◆ ff_cavs_modify_mb_i()

void ff_cavs_modify_mb_i ( AVSContext * h,
int * pred_mode_uv )

Definition at line 373 of file cavs.c.

Referenced by decode_mb_i().

◆ mc_dir_part()

static void mc_dir_part ( AVSContext * h,
AVFrame * pic,
int parity,
int chroma_height,
int list,
uint8_t * dest_y,
uint8_t * dest_cb,
uint8_t * dest_cr,
int src_x_offset,
int src_y_offset,
qpel_mc_func * qpix_op,
h264_chroma_mc_func chroma_op,
cavs_vector * mv )
inlinestatic

Definition at line 400 of file cavs.c.

Referenced by mc_part_std().

◆ mc_part_std()

static void mc_part_std ( AVSContext * h,
int chroma_height,
uint8_t * dest_y,
uint8_t * dest_cb,
uint8_t * dest_cr,
int x_offset,
int y_offset,
qpel_mc_func * qpix_put,
h264_chroma_mc_func chroma_put,
qpel_mc_func * qpix_avg,
h264_chroma_mc_func chroma_avg,
cavs_vector * mv )
inlinestatic

Definition at line 473 of file cavs.c.

Referenced by ff_cavs_inter(), and mc_part().

◆ ff_cavs_inter()

void ff_cavs_inter ( AVSContext * h,
enum cavs_mb mb_type )

Definition at line 513 of file cavs.c.

Referenced by decode_mb_b(), and decode_mb_p().

◆ scale_mv()

static void scale_mv ( AVSContext * h,
int * d_x,
int * d_y,
cavs_vector * src,
int distp )
inlinestatic

Definition at line 556 of file cavs.c.

◆ mv_pred_median()

static void mv_pred_median ( AVSContext * h,
cavs_vector * mvP,
cavs_vector * mvA,
cavs_vector * mvB,
cavs_vector * mvC )
inlinestatic

Definition at line 564 of file cavs.c.

Referenced by ff_cavs_mv().

◆ ff_cavs_mv()

void ff_cavs_mv ( AVSContext * h,
enum cavs_mv_loc nP,
enum cavs_mv_loc nC,
enum cavs_mv_pred mode,
enum cavs_block size,
int ref )

Definition at line 594 of file cavs.c.

Referenced by decode_mb_b(), and decode_mv().

◆ ff_cavs_set_mb_row()

void ff_cavs_set_mb_row ( AVSContext * h)

Point the macroblock sample pointers at macroblock row h->mby, addressed inside the macroblock's own field at the doubled stride (clause 7.2.3.1).

Definition at line 673 of file cavs.c.

Referenced by decode_slice_header(), ff_cavs_init_pic(), and ff_cavs_next_mb().

◆ ff_cavs_init_mb()

void ff_cavs_init_mb ( AVSContext * h)

initialise predictors for motion vectors and intra prediction

Definition at line 696 of file cavs.c.

Referenced by decode_mb_b(), decode_mb_i(), and decode_mb_p().

◆ ff_cavs_next_mb()

int ff_cavs_next_mb ( AVSContext * h)

save predictors for later macroblocks and increase macroblock address

Returns
0 if end of frame is reached, 1 otherwise

Definition at line 742 of file cavs.c.

Referenced by decode_pic().

◆ ff_cavs_init_pic()

int ff_cavs_init_pic ( AVSContext * h)

Definition at line 789 of file cavs.c.

Referenced by decode_pic().

◆ ff_cavs_init_top_lines()

int ff_cavs_init_top_lines ( AVSContext * h)

some predictions require data from the top-neighbouring macroblock.

this data has to be stored for one complete row of macroblocks and this storage space is allocated here

Definition at line 826 of file cavs.c.

Referenced by decode_seq_header().

◆ ff_cavs_init()

av_cold int ff_cavs_init ( AVCodecContext * avctx)

Definition at line 867 of file cavs.c.

◆ ff_cavs_end()

av_cold int ff_cavs_end ( AVCodecContext * avctx)

Definition at line 915 of file cavs.c.

Variable Documentation

◆ alpha_tab

const uint8_t alpha_tab[64]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3,
4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 20,
22, 24, 26, 28, 30, 33, 33, 35, 35, 36, 37, 37, 39, 39, 42, 44,
46, 48, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64
}

Definition at line 37 of file cavs.c.

Referenced by ps_tableinit().

◆ beta_tab

const uint8_t beta_tab[64]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6,
6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27
}

Definition at line 44 of file cavs.c.

◆ tc_tab

const uint8_t tc_tab[64]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4,
5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9
}

Definition at line 51 of file cavs.c.

◆ un_mv

const cavs_vector un_mv = { 0, 0, 1, NOT_AVAIL, 0 }
static

mark block as unavailable, i.e.

out of picture or not yet decoded

Definition at line 60 of file cavs.c.

Referenced by ff_cavs_init(), ff_cavs_init_mb(), ff_cavs_init_pic(), ff_cavs_mv(), and ff_cavs_next_mb().

◆ cavs_scan_field

const uint8_t cavs_scan_field[64]
static
Initial value:
= {
0, 8, 16, 1, 24, 32, 9, 17, 40, 48, 25, 2, 10, 56, 33, 18,
3, 41, 49, 26, 11, 19, 4, 57, 34, 12, 42, 27, 20, 50, 35, 28,
5, 13, 58, 43, 36, 21, 6, 29, 51, 44, 14, 22, 37, 59, 52, 30,
45, 60, 38, 53, 46, 61, 54, 7, 62, 15, 23, 31, 39, 47, 55, 63,
}

Inverse block scan method 2 (clause 9.5.3 c), figure 23), for field coded pictures, as the inverse ff_permute_scantable() expects.

Definition at line 66 of file cavs.c.

Referenced by ff_cavs_init().

◆ left_modifier_l

const int8_t left_modifier_l[8] = { 0, -1, 6, -1, -1, 7, 6, 7 }
static

Definition at line 73 of file cavs.c.

Referenced by ff_cavs_modify_mb_i().

◆ top_modifier_l

const int8_t top_modifier_l[8] = { -1, 1, 5, -1, -1, 5, 7, 7 }
static

Definition at line 74 of file cavs.c.

Referenced by ff_cavs_modify_mb_i().

◆ left_modifier_c

const int8_t left_modifier_c[7] = { 5, -1, 2, -1, 6, 5, 6 }
static

Definition at line 75 of file cavs.c.

Referenced by ff_cavs_modify_mb_i().

◆ top_modifier_c

const int8_t top_modifier_c[7] = { 4, 1, -1, -1, 4, 6, 6 }
static

Definition at line 76 of file cavs.c.

Referenced by ff_cavs_modify_mb_i().