FFmpeg
|
RV30/40 decoder common data. More...
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "avcodec.h"
#include "error_resilience.h"
#include "mpegvideo.h"
#include "golomb.h"
#include "internal.h"
#include "mathops.h"
#include "rectangle.h"
#include "thread.h"
#include "rv34vlc.h"
#include "rv34data.h"
#include "rv34.h"
Go to the source code of this file.
Functions | |
static void | ZERO8x2 (void *dst, int stride) |
av_cold int | ff_rv34_decode_init (AVCodecContext *avctx) |
Initialize decoder. More... | |
int | ff_rv34_decode_init_thread_copy (AVCodecContext *avctx) |
int | ff_rv34_decode_update_thread_context (AVCodecContext *dst, const AVCodecContext *src) |
static int | get_slice_offset (AVCodecContext *avctx, const uint8_t *buf, int n) |
static int | finish_frame (AVCodecContext *avctx, AVFrame *pict) |
static AVRational | update_sar (int old_w, int old_h, AVRational sar, int new_w, int new_h) |
int | ff_rv34_decode_frame (AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt) |
av_cold int | ff_rv34_decode_end (AVCodecContext *avctx) |
RV30/40 4x4 block decoding functions | |
static int | rv34_decode_cbp (GetBitContext *gb, RV34VLC *vlc, int table) |
Decode coded block pattern. More... | |
static void | decode_coeff (int16_t *dst, int coef, int esc, GetBitContext *gb, VLC *vlc, int q) |
Get one coefficient value from the bitstream and store it. More... | |
static void | decode_subblock (int16_t *dst, int code, const int is_block2, GetBitContext *gb, VLC *vlc, int q) |
Decode 2x2 subblock of coefficients. More... | |
static void | decode_subblock1 (int16_t *dst, int code, GetBitContext *gb, VLC *vlc, int q) |
Decode a single coefficient. More... | |
static void | decode_subblock3 (int16_t *dst, int code, GetBitContext *gb, VLC *vlc, int q_dc, int q_ac1, int q_ac2) |
static int | rv34_decode_block (int16_t *dst, GetBitContext *gb, RV34VLC *rvlc, int fc, int sc, int q_dc, int q_ac1, int q_ac2) |
Decode coefficients for 4x4 block. More... | |
RV30/40 bitstream parsing | |
int | ff_rv34_get_start_offset (GetBitContext *gb, int mb_size) |
Decode starting slice position. More... | |
static RV34VLC * | choose_vlc_set (int quant, int mod, int type) |
Select VLC set for decoding from current quantizer, modifier and frame type. More... | |
static int | rv34_decode_intra_mb_header (RV34DecContext *r, int8_t *intra_types) |
Decode intra macroblock header and return CBP in case of success, -1 otherwise. More... | |
static int | rv34_decode_inter_mb_header (RV34DecContext *r, int8_t *intra_types) |
Decode inter macroblock header and return CBP in case of success, -1 otherwise. More... | |
Variables | |
static const int | rv34_mb_type_to_lavc [12] |
translation of RV30/40 macroblock types to lavc ones More... | |
static RV34VLC | intra_vlcs [NUM_INTRA_TABLES] |
static RV34VLC | inter_vlcs [NUM_INTER_TABLES] |
RV30/40 VLC generating functions | |
static const int | table_offs [] |
static VLC_TYPE | table_data [117592][2] |
static void | rv34_gen_vlc (const uint8_t *bits, int size, VLC *vlc, const uint8_t *insyms, const int num) |
Generate VLC from codeword lengths. More... | |
static av_cold void | rv34_init_tables (void) |
Initialize all tables. More... | |
motion vector related code (prediction, reconstruction, motion compensation) | |
#define | GET_PTS_DIFF(a, b) ((a - b + 8192) & 0x1FFF) |
static const uint8_t | part_sizes_w [RV34_MB_TYPES] = { 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2 } |
macroblock partition width in 8x8 blocks More... | |
static const uint8_t | part_sizes_h [RV34_MB_TYPES] = { 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2 } |
macroblock partition height in 8x8 blocks More... | |
static const uint8_t | avail_indexes [4] = { 6, 7, 10, 11 } |
availability index for subblocks More... | |
static const int | chroma_coeffs [3] = { 0, 3, 5 } |
static const int | num_mvs [RV34_MB_TYPES] = { 0, 0, 1, 4, 1, 1, 0, 0, 2, 2, 2, 1 } |
number of motion vectors in each macroblock type More... | |
static int | rv34_decode_mv (RV34DecContext *r, int block_type) |
Decode motion vector differences and perform motion vector reconstruction and motion compensation. More... | |
static void | rv34_pred_mv (RV34DecContext *r, int block_type, int subblock_no, int dmv_no) |
motion vector prediction More... | |
static int | calc_add_mv (RV34DecContext *r, int dir, int val) |
Calculate motion vector component that should be added for direct blocks. More... | |
static void | rv34_pred_b_vector (int A[2], int B[2], int C[2], int A_avail, int B_avail, int C_avail, int *mx, int *my) |
Predict motion vector for B-frame macroblock. More... | |
static void | rv34_pred_mv_b (RV34DecContext *r, int block_type, int dir) |
motion vector prediction for B-frames More... | |
static void | rv34_pred_mv_rv3 (RV34DecContext *r, int block_type, int dir) |
motion vector prediction - RV3 version More... | |
static void | rv34_mc (RV34DecContext *r, const int block_type, const int xoff, const int yoff, int mv_off, const int width, const int height, int dir, const int thirdpel, int weighted, qpel_mc_func(*qpel_mc)[16], h264_chroma_mc_func(*chroma_mc)) |
generic motion compensation function More... | |
static void | rv34_mc_1mv (RV34DecContext *r, const int block_type, const int xoff, const int yoff, int mv_off, const int width, const int height, int dir) |
static void | rv4_weight (RV34DecContext *r) |
static void | rv34_mc_2mv (RV34DecContext *r, const int block_type) |
static void | rv34_mc_2mv_skip (RV34DecContext *r) |
Macroblock reconstruction functions | |
static const int | ittrans [9] |
mapping of RV30/40 intra prediction types to standard H.264 types More... | |
static const int | ittrans16 [4] |
mapping of RV30/40 intra 16x16 prediction types to standard H.264 types More... | |
static void | rv34_pred_4x4_block (RV34DecContext *r, uint8_t *dst, int stride, int itype, int up, int left, int down, int right) |
Perform 4x4 intra prediction. More... | |
static int | adjust_pred16 (int itype, int up, int left) |
static void | rv34_process_block (RV34DecContext *r, uint8_t *pdst, int stride, int fc, int sc, int q_dc, int q_ac) |
static void | rv34_output_i16x16 (RV34DecContext *r, int8_t *intra_types, int cbp) |
static void | rv34_output_intra (RV34DecContext *r, int8_t *intra_types, int cbp) |
static int | is_mv_diff_gt_3 (int16_t(*motion_val)[2], int step) |
static int | rv34_set_deblock_coef (RV34DecContext *r) |
static int | rv34_decode_inter_macroblock (RV34DecContext *r, int8_t *intra_types) |
static int | rv34_decode_intra_macroblock (RV34DecContext *r, int8_t *intra_types) |
static int | check_slice_end (RV34DecContext *r, MpegEncContext *s) |
static void | rv34_decoder_free (RV34DecContext *r) |
static int | rv34_decoder_alloc (RV34DecContext *r) |
static int | rv34_decoder_realloc (RV34DecContext *r) |
static int | rv34_decode_slice (RV34DecContext *r, int end, const uint8_t *buf, int buf_size) |
Detailed Description
RV30/40 decoder common data.
Definition in file rv34.c.
Macro Definition Documentation
Definition at line 513 of file rv34.c.
Referenced by ff_rv34_decode_frame().
Function Documentation
|
inlinestatic |
Definition at line 977 of file rv34.c.
Referenced by rv34_output_i16x16().
|
static |
Calculate motion vector component that should be added for direct blocks.
Definition at line 518 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
Definition at line 1326 of file rv34.c.
Referenced by rv34_decode_slice().
|
inlinestatic |
Select VLC set for decoding from current quantizer, modifier and frame type.
Definition at line 341 of file rv34.c.
Referenced by rv34_decode_inter_macroblock(), rv34_decode_inter_mb_header(), and rv34_decode_intra_mb_header().
|
inlinestatic |
Get one coefficient value from the bitstream and store it.
Definition at line 220 of file rv34.c.
Referenced by decode_subblock(), decode_subblock1(), and decode_subblock3().
|
inlinestatic |
Decode 2x2 subblock of coefficients.
Definition at line 240 of file rv34.c.
Referenced by rv34_decode_block().
|
inlinestatic |
Decode a single coefficient.
Definition at line 258 of file rv34.c.
Referenced by rv34_decode_block().
|
inlinestatic |
Definition at line 264 of file rv34.c.
Referenced by rv34_decode_block().
av_cold int ff_rv34_decode_end | ( | AVCodecContext * | avctx | ) |
int ff_rv34_decode_frame | ( | AVCodecContext * | avctx, |
void * | data, | ||
int * | got_picture_ptr, | ||
AVPacket * | avpkt | ||
) |
av_cold int ff_rv34_decode_init | ( | AVCodecContext * | avctx | ) |
Initialize decoder.
Definition at line 1470 of file rv34.c.
Referenced by rv30_decode_init(), and rv40_decode_init().
int ff_rv34_decode_init_thread_copy | ( | AVCodecContext * | avctx | ) |
int ff_rv34_decode_update_thread_context | ( | AVCodecContext * | dst, |
const AVCodecContext * | src | ||
) |
int ff_rv34_get_start_offset | ( | GetBitContext * | gb, |
int | mb_size | ||
) |
Decode starting slice position.
common decoding functions
- Todo:
- Maybe replace with ff_h263_decode_mba() ?
Definition at line 329 of file rv34.c.
Referenced by rv30_parse_slice_header(), and rv40_parse_slice_header().
|
static |
Definition at line 1570 of file rv34.c.
Referenced by ff_rv34_decode_frame(), and shorten_decode_frame().
|
static |
Definition at line 1564 of file rv34.c.
Referenced by ff_rv34_decode_frame().
|
static |
Definition at line 1136 of file rv34.c.
Referenced by rv34_set_deblock_coef().
|
static |
Decode coefficients for 4x4 block.
This is done by filling 2x2 subblocks with decoded coefficients in this order (the same for subblocks and subblock coefficients): o–o / / o–o
Definition at line 286 of file rv34.c.
Referenced by rv34_decode_inter_macroblock(), rv34_output_i16x16(), and rv34_process_block().
|
static |
Decode coded block pattern.
Definition at line 187 of file rv34.c.
Referenced by rv34_decode_inter_mb_header(), and rv34_decode_intra_mb_header().
|
static |
Definition at line 1178 of file rv34.c.
Referenced by rv34_decode_slice().
|
static |
Decode inter macroblock header and return CBP in case of success, -1 otherwise.
Definition at line 387 of file rv34.c.
Referenced by rv34_decode_inter_macroblock().
|
static |
Definition at line 1286 of file rv34.c.
Referenced by rv34_decode_slice().
|
static |
Decode intra macroblock header and return CBP in case of success, -1 otherwise.
Definition at line 352 of file rv34.c.
Referenced by rv34_decode_intra_macroblock().
|
static |
Decode motion vector differences and perform motion vector reconstruction and motion compensation.
Definition at line 841 of file rv34.c.
Referenced by rv34_decode_inter_mb_header().
|
static |
Definition at line 1388 of file rv34.c.
Referenced by ff_rv34_decode_frame().
|
static |
Definition at line 1354 of file rv34.c.
Referenced by ff_rv34_decode_init(), ff_rv34_decode_init_thread_copy(), and rv34_decoder_realloc().
|
static |
Definition at line 1342 of file rv34.c.
Referenced by ff_rv34_decode_end(), rv34_decoder_alloc(), and rv34_decoder_realloc().
|
static |
Definition at line 1381 of file rv34.c.
Referenced by ff_rv34_decode_frame(), and ff_rv34_decode_update_thread_context().
|
static |
Generate VLC from codeword lengths.
- Parameters
-
bits codeword lengths (zeroes are accepted) size length of input data vlc output VLC insyms symbols for input codes (NULL for default ones) num VLC table number (for static initialization)
Definition at line 108 of file rv34.c.
Referenced by rv34_init_tables().
|
inlinestatic |
generic motion compensation function
- Parameters
-
r decoder context block_type type of the current block xoff horizontal offset from the start of the current block yoff vertical offset from the start of the current block mv_off offset to the motion vector information width width of the current partition in 8x8 blocks height height of the current partition in 8x8 blocks dir motion compensation direction (i.e. from the last or the next reference frame) thirdpel motion vectors are specified in 1/3 of pixel qpel_mc a set of functions used to perform luma motion compensation chroma_mc a set of functions used to perform chroma motion compensation
Definition at line 663 of file rv34.c.
Referenced by rv34_mc_1mv(), rv34_mc_2mv(), and rv34_mc_2mv_skip().
|
static |
Definition at line 764 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
Definition at line 795 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
Definition at line 814 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
Definition at line 1009 of file rv34.c.
Referenced by rv34_decode_inter_macroblock(), and rv34_decode_intra_macroblock().
|
static |
Definition at line 1072 of file rv34.c.
Referenced by rv34_decode_inter_macroblock(), and rv34_decode_intra_macroblock().
|
static |
Perform 4x4 intra prediction.
Definition at line 950 of file rv34.c.
Referenced by rv34_output_intra().
|
inlinestatic |
Predict motion vector for B-frame macroblock.
Definition at line 528 of file rv34.c.
Referenced by rv34_pred_mv_b().
|
static |
motion vector prediction
Motion prediction performed for the block by using median prediction of motion vectors from the left, top and right top blocks but in corner cases some other vectors may be used instead.
Definition at line 464 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
motion vector prediction for B-frames
Definition at line 548 of file rv34.c.
Referenced by rv34_decode_mv().
|
static |
motion vector prediction - RV3 version
Definition at line 600 of file rv34.c.
Referenced by rv34_decode_mv().
|
inlinestatic |
Definition at line 993 of file rv34.c.
Referenced by rv34_decode_inter_macroblock(), rv34_output_i16x16(), and rv34_output_intra().
|
static |
Definition at line 1148 of file rv34.c.
Referenced by rv34_decode_inter_macroblock().
|
static |
Definition at line 773 of file rv34.c.
Referenced by rv34_mc_2mv(), and rv34_mc_2mv_skip().
|
static |
Definition at line 1600 of file rv34.c.
Referenced by ff_rv34_decode_frame().
Definition at line 45 of file rv34.c.
Referenced by rv34_decode_mv(), and rv34_pred_mv_b().
Variable Documentation
|
static |
availability index for subblocks
Definition at line 455 of file rv34.c.
Referenced by rv34_pred_mv(), and rv34_pred_mv_rv3().
|
static |
|
static |
|
static |
|
static |
mapping of RV30/40 intra prediction types to standard H.264 types
|
static |
mapping of RV30/40 intra 16x16 prediction types to standard H.264 types
|
static |
|
static |
macroblock partition height in 8x8 blocks
Definition at line 452 of file rv34.c.
Referenced by rv34_pred_mv().
|
static |
macroblock partition width in 8x8 blocks
Definition at line 449 of file rv34.c.
Referenced by rv34_pred_mv().
|
static |
translation of RV30/40 macroblock types to lavc ones
Definition at line 52 of file rv34.c.
Referenced by rv34_decode_inter_mb_header().
|
static |
Definition at line 98 of file rv34.c.
Referenced by ff_ivi_init_static_vlc(), and rv34_gen_vlc().
|
static |
Definition at line 77 of file rv34.c.
Referenced by rv34_gen_vlc().
Generated on Mon Nov 18 2024 06:52:09 for FFmpeg by 1.8.11