Go to the documentation of this file.
43 0, 614, 1222, 1794, 2410, 3014, 3586, 4202, 4792, 5382, 5966, 6542,
44 7138, 7716, 8292, 8864, 9444, 10030, 10642, 11212, 11814
55 static VLC_TYPE aic_mode2_table[11814][2];
66 if((
i % 10) == 9)
continue;
133 int w =
r->s.width,
h =
r->s.height;
154 mb_size = ((
w + 15) >> 4) * ((
h + 15) >> 4);
172 for(
i = 0;
i < 4;
i++, dst +=
r->intra_types_stride){
173 if(!
i &&
s->first_slice_line){
175 dst[0] = (pattern >> 2) & 2;
176 dst[1] = (pattern >> 1) & 2;
177 dst[2] = pattern & 2;
178 dst[3] = (pattern << 1) & 2;
182 for(j = 0; j < 4; j++){
189 A = ptr[-
r->intra_types_stride + 1];
190 B = ptr[-
r->intra_types_stride];
192 pattern =
A +
B * (1 << 4) +
C * (1 << 8);
202 if(
B != -1 &&
C != -1)
233 int mb_pos =
s->mb_x +
s->mb_y *
s->mb_stride;
235 if(!
r->s.mb_skip_run) {
237 if(
r->s.mb_skip_run > (
unsigned)
s->mb_num)
241 if(--
r->s.mb_skip_run)
244 if(
r->avail_cache[6-4]){
247 if(
r->avail_cache[6-1])
248 blocks[
r->mb_type[mb_pos - 1]]++;
249 blocks[
r->mb_type[mb_pos -
s->mb_stride]]++;
250 if(
r->avail_cache[6-2])
251 blocks[
r->mb_type[mb_pos -
s->mb_stride + 1]]++;
252 if(
r->avail_cache[6-5])
253 blocks[
r->mb_type[mb_pos -
s->mb_stride - 1]]++;
255 if(blocks[
i] > count){
262 }
else if (
r->avail_cache[6-1])
263 prev_type =
r->mb_type[mb_pos - 1];
290 #define MASK_CUR 0x0001
291 #define MASK_RIGHT 0x0008
292 #define MASK_BOTTOM 0x0010
293 #define MASK_TOP 0x1000
294 #define MASK_Y_TOP_ROW 0x000F
295 #define MASK_Y_LAST_ROW 0xF000
296 #define MASK_Y_LEFT_COL 0x1111
297 #define MASK_Y_RIGHT_COL 0x8888
298 #define MASK_C_TOP_ROW 0x0003
299 #define MASK_C_LAST_ROW 0x000C
300 #define MASK_C_LEFT_COL 0x0005
301 #define MASK_C_RIGHT_COL 0x000A
308 int lim_q1,
int lim_p1,
309 int alpha,
int beta,
int beta2,
310 int chroma,
int edge,
int dir)
312 int filter_p1, filter_q1;
317 edge, &filter_p1, &filter_q1);
319 lims = filter_p1 + filter_q1 + ((lim_q1 + lim_p1) >> 1) + 1;
324 }
else if (filter_p1 & filter_q1) {
326 lims, lim_q1, lim_p1);
327 }
else if (filter_p1 | filter_q1) {
329 alpha, beta, lims >> 1, lim_q1 >> 1,
343 int alpha, beta, betaY, betaC;
371 mb_pos = row *
s->mb_stride;
372 for(mb_x = 0; mb_x <
s->mb_width; mb_x++, mb_pos++){
373 int mbtype =
s->current_picture_ptr->mb_type[mb_pos];
375 r->cbp_luma [mb_pos] =
r->deblock_coefs[mb_pos] = 0xFFFF;
377 r->cbp_chroma[mb_pos] = 0xFF;
379 mb_pos = row *
s->mb_stride;
380 for(mb_x = 0; mb_x <
s->mb_width; mb_x++, mb_pos++){
381 int y_h_deblock, y_v_deblock;
382 int c_v_deblock[2], c_h_deblock[2];
385 unsigned y_to_deblock;
388 q =
s->current_picture_ptr->qscale_table[mb_pos];
391 betaY = betaC = beta * 3;
392 if(
s->width *
s->height <= 176*144)
398 avail[3] = row <
s->mb_height - 1;
399 for(
i = 0;
i < 4;
i++){
402 mvmasks[
i] =
r->deblock_coefs[
pos];
403 mbtype [
i] =
s->current_picture_ptr->mb_type[
pos];
404 cbp [
i] =
r->cbp_luma[
pos];
405 uvcbp[
i][0] =
r->cbp_chroma[
pos] & 0xF;
406 uvcbp[
i][1] =
r->cbp_chroma[
pos] >> 4;
409 mbtype [
i] = mbtype[0];
411 uvcbp[
i][0] = uvcbp[
i][1] = 0;
416 y_to_deblock = mvmasks[
POS_CUR]
424 y_h_deblock = y_to_deblock
433 y_v_deblock = y_to_deblock
445 for(
i = 0;
i < 2;
i++){
447 c_v_deblock[
i] = c_to_deblock[
i]
450 c_h_deblock[
i] = c_to_deblock[
i]
461 for(j = 0; j < 16; j += 4){
462 Y =
s->current_picture_ptr->f->data[0] + mb_x*16 + (row*16 + j) *
s->linesize;
463 for(
i = 0;
i < 4;
i++,
Y += 4){
474 clip_cur,
alpha, beta, betaY,
486 alpha, beta, betaY, 0, 0, 1);
493 alpha, beta, betaY, 0, 1, 0);
501 alpha, beta, betaY, 0, 1, 1);
505 for(k = 0; k < 2; k++){
506 for(j = 0; j < 2; j++){
507 C =
s->current_picture_ptr->f->data[k + 1] + mb_x*8 + (row*8 + j*4) *
s->uvlinesize;
508 for(
i = 0;
i < 2;
i++,
C += 4){
511 if(c_h_deblock[k] & (
MASK_CUR << (ij+2))){
516 alpha, beta, betaC, 1, 0, 0);
526 alpha, beta, betaC, 1, 0, 1);
533 alpha, beta, betaC, 1, 1, 0);
540 alpha, beta, betaC, 1, 1, 1);
AVPixelFormat
Pixel format.
static const uint16_t rv40_aic_table_index[MODE2_PATTERNS_NUM]
intra types table
static av_cold int init(AVCodecContext *avctx)
static int get_bits_left(GetBitContext *gb)
av_cold int ff_rv34_decode_end(AVCodecContext *avctx)
static void rv40_adaptive_loop_filter(RV34DSPContext *rdsp, uint8_t *src, int stride, int dmode, int lim_q1, int lim_p1, int alpha, int beta, int beta2, int chroma, int edge, int dir)
static const uint8_t aic_mode2_vlc_bits[AIC_MODE2_NUM][AIC_MODE2_SIZE]
int ff_rv34_get_start_offset(GetBitContext *gb, int mb_size)
Decode starting slice position.
static unsigned get_interleaved_ue_golomb(GetBitContext *gb)
int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
#define init_vlc(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
static const uint16_t table[]
static void rv40_loop_filter(RV34DecContext *r, int row)
RV40 loop filtering function.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static VLC aic_mode1_vlc[AIC_MODE1_NUM]
static const int rv40_standard_heights[]
static const uint8_t ptype_vlc_bits[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE]
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int rv40_decode_init(AVCodecContext *avctx)
Initialize decoder.
#define MODE2_PATTERNS_NUM
static const uint8_t ptype_vlc_syms[PTYPE_VLC_SIZE]
static double val(void *priv, double ch)
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AIC_MODE2_NUM
codes used for determining a pair of block types
av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
Initialize decoder.
static av_cold void rv40_init_tables(void)
Initialize all tables.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static int rv40_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceInfo *si)
rv40_loop_filter_strength_func rv40_loop_filter_strength[2]
static enum AVPixelFormat pix_fmts[]
static const uint8_t ptype_vlc_codes[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE]
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static void rv40_parse_picture_size(GetBitContext *gb, int *w, int *h)
Get encoded picture size - usually this is called from rv40_parse_slice_header.
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
static void flush(AVCodecContext *avctx)
@ RV34_MB_SKIP
Skipped block.
int type
slice type (intra, inter)
int ff_rv34_decode_frame(AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt)
static unsigned int get_bits1(GetBitContext *s)
#define INIT_VLC_USE_NEW_STATIC
static const uint8_t aic_mode1_vlc_bits[AIC_MODE1_NUM][AIC_MODE1_SIZE]
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
#define NUM_BTYPE_VLCS
tables used for P-frame macroblock type decoding
static const uint8_t rv40_aic_top_vlc_bits[AIC_TOP_SIZE]
static int rv40_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t *dst)
Decode 4x4 intra types array.
static const uint8_t aic_mode1_vlc_codes[AIC_MODE1_NUM][AIC_MODE1_SIZE]
int quant
quantizer used for this slice
static const uint16_t aic_mode2_vlc_codes[AIC_MODE2_NUM][AIC_MODE2_SIZE]
int vlc_set
VLCs used for this slice.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static int rv40_decode_mb_info(RV34DecContext *r)
Decode macroblock information.
static const uint8_t rv40_alpha_tab[32]
alpha parameter for RV40 loop filter - almost the same as in JVT-A003r1
void ff_mpeg_flush(AVCodecContext *avctx)
static VLC aic_mode2_vlc[AIC_MODE2_NUM]
static const int rv40_standard_widths[]
standard widths and heights coded in RV40
static void skip_bits1(GetBitContext *s)
#define AIC_MODE1_NUM
Codes used for determining block type.
#define NUM_PTYPE_VLCS
tables used for P-frame macroblock type decoding
static int get_dimension(GetBitContext *gb, const int *dim)
Get stored dimension from bitstream.
rv40_strong_loop_filter_func rv40_strong_loop_filter[2]
static const uint8_t rv40_filter_clip_tbl[3][32]
clip table for RV40 loop filter - the same as in JVT-A003r1
#define i(width, name, range_min, range_max)
static const uint8_t rv40_beta_tab[32]
beta parameter for RV40 loop filter - almost the same as in JVT-A003r1
const char * name
Name of the codec implementation.
essential slice information
static const uint8_t btype_vlc_codes[NUM_BTYPE_VLCS][BTYPE_VLC_SIZE]
static const uint8_t rv40_aic_top_vlc_codes[AIC_TOP_SIZE]
static const uint8_t btype_vlc_syms[BTYPE_VLC_SIZE]
static const uint8_t block_num_to_btype_vlc_num[12]
reverse of btype_vlc_syms
static const int neighbour_offs_y[4]
main external API structure.
rv40_weak_loop_filter_func rv40_weak_loop_filter[2]
static VLC btype_vlc[NUM_BTYPE_VLCS]
#define IS_SEPARATE_DC(a)
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
@ AV_PICTURE_TYPE_P
Predicted.
static const int16_t mode2_offs[]
static const uint8_t rv40_luma_dc_quant[2][32]
luma quantizer values The second table is used for inter blocks.
#define FF_CODEC_CAP_ALLOCATE_PROGRESS
static const int16_t alpha[]
static VLC ptype_vlc[NUM_PTYPE_VLCS]
#define AIC_TOP_BITS
codes used for the first four block types
static const int neighbour_offs_x[4]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
static const uint8_t btype_vlc_bits[NUM_BTYPE_VLCS][PTYPE_VLC_SIZE]
VLC_TYPE(* table)[2]
code, bits
static double clip(void *opaque, double val)
Clip value val in the minval - maxval range.
static const uint8_t block_num_to_ptype_vlc_num[12]
reverse of ptype_vlc_syms
static const uint8_t dither[8][8]