Go to the documentation of this file.
   48                                               int nb_codes, 
const uint8_t (*
tab)[2])
 
   51                                            &
tab[0][1], 2, &
tab[0][0], 2, 1,
 
   67         if((
i % 10) == 9) 
continue;
 
   79                 syms[j] = (
first << 8) | second;
 
   81                 syms[j] = 
first | (second << 8);
 
  135     int w = 
r->s.width, 
h = 
r->s.height;
 
  156     mb_size = ((
w + 15) >> 4) * ((
h + 15) >> 4);
 
  174     for(
i = 0; 
i < 4; 
i++, dst += 
r->intra_types_stride){
 
  175         if(!
i && 
s->first_slice_line){
 
  177             dst[0] = (pattern >> 2) & 2;
 
  178             dst[1] = (pattern >> 1) & 2;
 
  179             dst[2] =  pattern       & 2;
 
  180             dst[3] = (pattern << 1) & 2;
 
  184         for(j = 0; j < 4; j++){
 
  191             A = ptr[-
r->intra_types_stride + 1]; 
 
  192             B = ptr[-
r->intra_types_stride];
 
  194             pattern = 
A + 
B * (1 << 4) + 
C * (1 << 8);
 
  203                 if(
B != -1 && 
C != -1)
 
  234     int mb_pos = 
s->mb_x + 
s->mb_y * 
s->mb_stride;
 
  236     if(!
r->s.mb_skip_run) {
 
  238         if(
r->s.mb_skip_run > (
unsigned)
s->mb_num)
 
  242     if(--
r->s.mb_skip_run)
 
  245     if(
r->avail_cache[6-4]){
 
  248         if(
r->avail_cache[6-1])
 
  249             blocks[
r->mb_type[mb_pos - 1]]++;
 
  250         blocks[
r->mb_type[mb_pos - 
s->mb_stride]]++;
 
  251         if(
r->avail_cache[6-2])
 
  252             blocks[
r->mb_type[mb_pos - 
s->mb_stride + 1]]++;
 
  253         if(
r->avail_cache[6-5])
 
  254             blocks[
r->mb_type[mb_pos - 
s->mb_stride - 1]]++;
 
  256             if(blocks[
i] > count){
 
  263     } 
else if (
r->avail_cache[6-1])
 
  264         prev_type = 
r->mb_type[mb_pos - 1];
 
  291 #define MASK_CUR          0x0001 
  292 #define MASK_RIGHT        0x0008 
  293 #define MASK_BOTTOM       0x0010 
  294 #define MASK_TOP          0x1000 
  295 #define MASK_Y_TOP_ROW    0x000F 
  296 #define MASK_Y_LAST_ROW   0xF000 
  297 #define MASK_Y_LEFT_COL   0x1111 
  298 #define MASK_Y_RIGHT_COL  0x8888 
  299 #define MASK_C_TOP_ROW    0x0003 
  300 #define MASK_C_LAST_ROW   0x000C 
  301 #define MASK_C_LEFT_COL   0x0005 
  302 #define MASK_C_RIGHT_COL  0x000A 
  309                                       int lim_q1, 
int lim_p1,
 
  310                                       int alpha, 
int beta, 
int beta2,
 
  311                                       int chroma, 
int edge, 
int dir)
 
  313     int filter_p1, filter_q1;
 
  318                                                   edge, &filter_p1, &filter_q1);
 
  320     lims = filter_p1 + filter_q1 + ((lim_q1 + lim_p1) >> 1) + 1;
 
  325     } 
else if (filter_p1 & filter_q1) {
 
  327                                          lims, lim_q1, lim_p1);
 
  328     } 
else if (filter_p1 | filter_q1) {
 
  330                                          alpha, beta, lims >> 1, lim_q1 >> 1,
 
  344     int alpha, beta, betaY, betaC;
 
  372     mb_pos = row * 
s->mb_stride;
 
  373     for(mb_x = 0; mb_x < 
s->mb_width; mb_x++, mb_pos++){
 
  374         int mbtype = 
s->current_picture_ptr->mb_type[mb_pos];
 
  376             r->cbp_luma  [mb_pos] = 
r->deblock_coefs[mb_pos] = 0xFFFF;
 
  378             r->cbp_chroma[mb_pos] = 0xFF;
 
  380     mb_pos = row * 
s->mb_stride;
 
  381     for(mb_x = 0; mb_x < 
s->mb_width; mb_x++, mb_pos++){
 
  382         int y_h_deblock, y_v_deblock;
 
  383         int c_v_deblock[2], c_h_deblock[2];
 
  386         unsigned y_to_deblock;
 
  389         q = 
s->current_picture_ptr->qscale_table[mb_pos];
 
  392         betaY = betaC = beta * 3;
 
  393         if(
s->width * 
s->height <= 176*144)
 
  399         avail[3] = row < 
s->mb_height - 1;
 
  400         for(
i = 0; 
i < 4; 
i++){
 
  403                 mvmasks[
i] = 
r->deblock_coefs[
pos];
 
  404                 mbtype [
i] = 
s->current_picture_ptr->mb_type[
pos];
 
  405                 cbp    [
i] = 
r->cbp_luma[
pos];
 
  406                 uvcbp[
i][0] = 
r->cbp_chroma[
pos] & 0xF;
 
  407                 uvcbp[
i][1] = 
r->cbp_chroma[
pos] >> 4;
 
  410                 mbtype [
i] = mbtype[0];
 
  412                 uvcbp[
i][0] = uvcbp[
i][1] = 0;
 
  417         y_to_deblock =  mvmasks[
POS_CUR]
 
  425         y_h_deblock =   y_to_deblock
 
  434         y_v_deblock =   y_to_deblock
 
  446         for(
i = 0; 
i < 2; 
i++){
 
  448             c_v_deblock[
i] =   c_to_deblock[
i]
 
  451             c_h_deblock[
i] =   c_to_deblock[
i]
 
  462         for(j = 0; j < 16; j += 4){
 
  463             Y = 
s->current_picture_ptr->f->data[0] + mb_x*16 + (row*16 + j) * 
s->linesize;
 
  464             for(
i = 0; 
i < 4; 
i++, 
Y += 4){
 
  475                                               clip_cur, 
alpha, beta, betaY,
 
  487                                               alpha, beta, betaY, 0, 0, 1);
 
  494                                        alpha, beta, betaY, 0, 1, 0);
 
  502                                        alpha, beta, betaY, 0, 1, 1);
 
  506         for(k = 0; k < 2; k++){
 
  507             for(j = 0; j < 2; j++){
 
  508                 C = 
s->current_picture_ptr->f->data[k + 1] + mb_x*8 + (row*8 + j*4) * 
s->uvlinesize;
 
  509                 for(
i = 0; 
i < 2; 
i++, 
C += 4){
 
  512                     if(c_h_deblock[k] & (
MASK_CUR << (ij+2))){
 
  517                                            alpha, beta, betaC, 1, 0, 0);
 
  527                                            alpha, beta, betaC, 1, 0, 1);
 
  534                                            alpha, beta, betaC, 1, 1, 0);
 
  541                                            alpha, beta, betaC, 1, 1, 1);
 
  
static const uint16_t rv40_aic_table_index[MODE2_PATTERNS_NUM]
intra types table
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)
static void rv40_loop_filter(RV34DecContext *r, int row)
RV40 loop filtering function.
static const uint8_t aic_mode2_vlc_syms[AIC_MODE2_NUM][AIC_MODE2_SIZE]
static const int rv40_standard_heights[]
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int rv40_decode_init(AVCodecContext *avctx)
Initialize decoder.
AVCodec p
The public AVCodec.
#define MODE2_PATTERNS_NUM
static const VLCElem * ptype_vlc[NUM_PTYPE_VLCS]
static const struct twinvq_data tab
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
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But first
static int ff_thread_once(char *control, void(*routine)(void))
#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.
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
#define FF_CODEC_DECODE_CB(func)
static int rv40_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceInfo *si)
rv40_loop_filter_strength_func rv40_loop_filter_strength[2]
static const VLCElem * btype_vlc[NUM_BTYPE_VLCS]
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 CODEC_LONG_NAME(str)
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
@ RV34_MB_SKIP
Skipped block.
int type
slice type (intra, inter)
const FFCodec ff_rv40_decoder
static unsigned int get_bits1(GetBitContext *s)
#define UPDATE_THREAD_CONTEXT(func)
#define NUM_BTYPE_VLCS
tables used for P-frame macroblock type decoding
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
static int rv40_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t *dst)
Decode 4x4 intra types array.
int quant
quantizer used for this slice
static const av_cold VLCElem * rv40_init_table(VLCInitState *state, int nb_bits, int nb_codes, const uint8_t(*tab)[2])
int(* init)(AVBSFContext *ctx)
int vlc_set
VLCs used for this slice.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
int ff_rv34_decode_frame(AVCodecContext *avctx, AVFrame *pict, int *got_picture_ptr, AVPacket *avpkt)
static int rv40_decode_mb_info(RV34DecContext *r)
Decode macroblock information.
#define FF_CODEC_CAP_ALLOCATE_PROGRESS
static const uint8_t rv40_alpha_tab[32]
alpha parameter for RV40 loop filter - almost the same as in JVT-A003r1
static const int rv40_standard_widths[]
standard widths and heights coded in RV40
void ff_mpeg_flush(AVCodecContext *avctx)
static const uint8_t btype_vlc_tabs[NUM_BTYPE_VLCS][BTYPE_VLC_SIZE][2]
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
static const VLCElem * aic_mode2_vlc[AIC_MODE2_NUM]
const char * name
Name of the codec implementation.
essential slice information
static const uint8_t block_num_to_btype_vlc_num[12]
static const int neighbour_offs_y[4]
main external API structure.
rv40_weak_loop_filter_func rv40_weak_loop_filter[2]
#define IS_SEPARATE_DC(a)
static VLCElem aic_top_vlc[23590]
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
const av_cold VLCElem * ff_vlc_init_tables_from_lengths(VLCInitState *state, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags)
@ AV_PICTURE_TYPE_P
Predicted.
static const uint8_t rv40_luma_dc_quant[2][32]
luma quantizer values The second table is used for inter blocks.
#define VLC_INIT_STATE(_table)
static const int16_t alpha[]
#define AIC_TOP_BITS
codes used for the first four block types
static const int neighbour_offs_x[4]
static const VLCElem * aic_mode1_vlc[AIC_MODE1_NUM]
static const uint8_t rv40_aic_top_vlc_tab[AIC_TOP_SIZE][2]
#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...
void ff_rv40dsp_init(RV34DSPContext *c)
static const uint8_t ptype_vlc_tabs[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE][2]
static const uint8_t block_num_to_ptype_vlc_num[12]
static const uint8_t aic_mode1_vlc_tabs[AIC_MODE1_NUM][AIC_MODE1_SIZE][2]
static const uint8_t dither[8][8]