vp3.c File Reference

On2 VP3 Video Decoder. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "internal.h"
#include "dsputil.h"
#include "get_bits.h"
#include "vp3data.h"
#include "xiph.h"
#include "thread.h"

Go to the source code of this file.

Data Structures

struct  Vp3Fragment
struct  Vp3DecodeContext

Macros

#define FRAGMENT_PIXELS   8
#define SB_NOT_CODED   0
#define SB_PARTIALLY_CODED   1
#define SB_FULLY_CODED   2
#define MAXIMUM_LONG_BIT_RUN   4129
#define MODE_INTER_NO_MV   0
#define MODE_INTRA   1
#define MODE_INTER_PLUS_MV   2
#define MODE_INTER_LAST_MV   3
#define MODE_INTER_PRIOR_LAST   4
#define MODE_USING_GOLDEN   5
#define MODE_GOLDEN_MV   6
#define MODE_INTER_FOURMV   7
#define CODING_MODE_COUNT   8
#define MODE_COPY   8
#define MIN_DEQUANT_VAL   2
#define TOKEN_EOB(eob_run)   ((eob_run) << 2)
#define TOKEN_ZERO_RUN(coeff, zero_run)   (((coeff) << 9) + ((zero_run) << 2) + 1)
#define TOKEN_COEFF(coeff)   (((coeff) << 2) + 2)
#define BLOCK_X   (2*mb_x + (k&1))
#define BLOCK_Y   (2*mb_y + (k>>1))
#define SET_CHROMA_MODES
#define COMPATIBLE_FRAME(x)   (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
#define DC_COEFF(u)   s->all_fragments[u].dc
#define PUL   8
#define PU   4
#define PUR   2
#define PL   1
#define copy_fields(to, from, start_field, end_field)   memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)

Typedefs

typedef struct Vp3Fragment Vp3Fragment
typedef struct Vp3DecodeContext Vp3DecodeContext

Functions

static void vp3_decode_flush (AVCodecContext *avctx)
static av_cold int vp3_decode_end (AVCodecContext *avctx)
static int init_block_mapping (Vp3DecodeContext *s)
static void init_dequantizer (Vp3DecodeContext *s, int qpi)
static void init_loop_filter (Vp3DecodeContext *s)
static int unpack_superblocks (Vp3DecodeContext *s, GetBitContext *gb)
static int unpack_modes (Vp3DecodeContext *s, GetBitContext *gb)
static int unpack_vectors (Vp3DecodeContext *s, GetBitContext *gb)
static int unpack_block_qpis (Vp3DecodeContext *s, GetBitContext *gb)
static int unpack_vlcs (Vp3DecodeContext *s, GetBitContext *gb, VLC *table, int coeff_index, int plane, int eob_run)
static void reverse_dc_prediction (Vp3DecodeContext *s, int first_fragment, int fragment_width, int fragment_height)
static int unpack_dct_coeffs (Vp3DecodeContext *s, GetBitContext *gb)
static void apply_loop_filter (Vp3DecodeContext *s, int plane, int ystart, int yend)
static int vp3_dequant (Vp3DecodeContext *s, Vp3Fragment *frag, int plane, int inter, DCTELEM block[64])
 Pull DCT tokens from the 64 levels to decode and dequant the coefficients for the next block in coding order.
static void vp3_draw_horiz_band (Vp3DecodeContext *s, int y)
 called when all pixels up to row y are complete
static void await_reference_row (Vp3DecodeContext *s, Vp3Fragment *fragment, int motion_y, int y)
 Wait for the reference frame of the current fragment.
static void render_slice (Vp3DecodeContext *s, int slice)
static av_cold int allocate_tables (AVCodecContext *avctx)
 Allocate tables for per-frame data in Vp3DecodeContext.
static av_cold int vp3_decode_init (AVCodecContext *avctx)
static void update_frames (AVCodecContext *avctx)
 Release and shuffle frames after decode finishes.
static int vp3_update_thread_context (AVCodecContext *dst, const AVCodecContext *src)
static int vp3_decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
static int read_huffman_tree (AVCodecContext *avctx, GetBitContext *gb)
static int vp3_init_thread_copy (AVCodecContext *avctx)

Variables

static const int ModeAlphabet [6][CODING_MODE_COUNT]
static const uint8_t hilbert_offset [16][2]
AVCodec ff_vp3_decoder

Detailed Description

On2 VP3 Video Decoder.

VP3 Video Decoder by Mike Melanson (mike at multimedia.cx) For more information about the VP3 coding process, visit: http://wiki.multimedia.cx/index.php?title=On2_VP3

Theora decoder by Alex Beregszaszi

Definition in file vp3.c.

Macro Definition Documentation

#define BLOCK_X   (2*mb_x + (k&1))

Referenced by unpack_modes(), and unpack_vectors().

#define BLOCK_Y   (2*mb_y + (k>>1))

Referenced by unpack_modes(), and unpack_vectors().

#define CODING_MODE_COUNT   8

Definition at line 72 of file vp3.c.

Referenced by unpack_modes().

#define COMPATIBLE_FRAME (   x)    (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)

Definition at line 1126 of file vp3.c.

Referenced by reverse_dc_prediction().

#define copy_fields (   to,
  from,
  start_field,
  end_field 
)    memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)
#define DC_COEFF (   u)    s->all_fragments[u].dc

Definition at line 1128 of file vp3.c.

Referenced by reverse_dc_prediction().

#define FRAGMENT_PIXELS   8

Definition at line 46 of file vp3.c.

Referenced by vp3_decode_init().

#define MAXIMUM_LONG_BIT_RUN   4129

Definition at line 62 of file vp3.c.

Referenced by unpack_block_qpis(), and unpack_superblocks().

#define MIN_DEQUANT_VAL   2

Definition at line 125 of file vp3.c.

#define MODE_COPY   8
#define MODE_GOLDEN_MV   6

Definition at line 70 of file vp3.c.

Referenced by await_reference_row(), render_slice(), and unpack_vectors().

#define MODE_INTER_FOURMV   7

Definition at line 71 of file vp3.c.

Referenced by unpack_vectors().

#define MODE_INTER_LAST_MV   3

Definition at line 67 of file vp3.c.

Referenced by unpack_vectors().

#define MODE_INTER_NO_MV   0

Definition at line 64 of file vp3.c.

Referenced by unpack_modes(), and unpack_superblocks().

#define MODE_INTER_PLUS_MV   2

Definition at line 66 of file vp3.c.

Referenced by unpack_vectors().

#define MODE_INTER_PRIOR_LAST   4

Definition at line 68 of file vp3.c.

Referenced by unpack_vectors().

#define MODE_INTRA   1

Definition at line 65 of file vp3.c.

Referenced by render_slice(), and unpack_modes().

#define MODE_USING_GOLDEN   5

Definition at line 69 of file vp3.c.

Referenced by await_reference_row(), and render_slice().

#define PL   1
#define PU   4

Referenced by reverse_dc_prediction().

#define PUL   8

Referenced by reverse_dc_prediction().

#define PUR   2

Referenced by reverse_dc_prediction().

#define SB_FULLY_CODED   2

Definition at line 57 of file vp3.c.

Referenced by unpack_superblocks().

#define SB_NOT_CODED   0

Definition at line 55 of file vp3.c.

Referenced by unpack_superblocks().

#define SB_PARTIALLY_CODED   1

Definition at line 56 of file vp3.c.

Referenced by unpack_superblocks().

#define SET_CHROMA_MODES
Value:
if (frag[s->fragment_start[1]].coding_method != MODE_COPY) \
frag[s->fragment_start[1]].coding_method = coding_mode;\
if (frag[s->fragment_start[2]].coding_method != MODE_COPY) \
frag[s->fragment_start[2]].coding_method = coding_mode;

Referenced by unpack_modes().

#define TOKEN_COEFF (   coeff)    (((coeff) << 2) + 2)

Definition at line 202 of file vp3.c.

Referenced by unpack_vlcs().

#define TOKEN_EOB (   eob_run)    ((eob_run) << 2)

Definition at line 200 of file vp3.c.

Referenced by unpack_vlcs().

#define TOKEN_ZERO_RUN (   coeff,
  zero_run 
)    (((coeff) << 9) + ((zero_run) << 2) + 1)

Definition at line 201 of file vp3.c.

Referenced by unpack_vlcs().

Typedef Documentation

typedef struct Vp3Fragment Vp3Fragment

Function Documentation

static av_cold int allocate_tables ( AVCodecContext avctx)
static

Allocate tables for per-frame data in Vp3DecodeContext.

Definition at line 1628 of file vp3.c.

Referenced by vp3_decode_init(), and vp3_update_thread_context().

static void apply_loop_filter ( Vp3DecodeContext s,
int  plane,
int  ystart,
int  yend 
)
static

Definition at line 1280 of file vp3.c.

Referenced by render_slice(), and vc1_decode_p_blocks().

static void await_reference_row ( Vp3DecodeContext s,
Vp3Fragment fragment,
int  motion_y,
int  y 
)
static

Wait for the reference frame of the current fragment.

The progress value is in luma pixel rows.

Definition at line 1432 of file vp3.c.

Referenced by render_slice().

static int init_block_mapping ( Vp3DecodeContext s)
static

Definition at line 320 of file vp3.c.

Referenced by allocate_tables().

static void init_dequantizer ( Vp3DecodeContext s,
int  qpi 
)
static

Definition at line 351 of file vp3.c.

static void init_loop_filter ( Vp3DecodeContext s)
static

Definition at line 391 of file vp3.c.

static int read_huffman_tree ( AVCodecContext avctx,
GetBitContext gb 
)
static

Definition at line 2064 of file vp3.c.

static void render_slice ( Vp3DecodeContext s,
int  slice 
)
static

Definition at line 1454 of file vp3.c.

static void reverse_dc_prediction ( Vp3DecodeContext s,
int  first_fragment,
int  fragment_width,
int  fragment_height 
)
static

Definition at line 1130 of file vp3.c.

Referenced by unpack_dct_coeffs().

static int unpack_block_qpis ( Vp3DecodeContext s,
GetBitContext gb 
)
static

Definition at line 856 of file vp3.c.

static int unpack_dct_coeffs ( Vp3DecodeContext s,
GetBitContext gb 
)
static

Definition at line 1034 of file vp3.c.

static int unpack_modes ( Vp3DecodeContext s,
GetBitContext gb 
)
static

Definition at line 573 of file vp3.c.

static int unpack_superblocks ( Vp3DecodeContext s,
GetBitContext gb 
)
static

Definition at line 419 of file vp3.c.

static int unpack_vectors ( Vp3DecodeContext s,
GetBitContext gb 
)
static

Definition at line 679 of file vp3.c.

static int unpack_vlcs ( Vp3DecodeContext s,
GetBitContext gb,
VLC table,
int  coeff_index,
int  plane,
int  eob_run 
)
static

Definition at line 910 of file vp3.c.

Referenced by unpack_dct_coeffs().

static void update_frames ( AVCodecContext avctx)
static

Release and shuffle frames after decode finishes.

Definition at line 1835 of file vp3.c.

Referenced by vp3_update_thread_context().

static av_cold int vp3_decode_end ( AVCodecContext avctx)
static

Definition at line 276 of file vp3.c.

Referenced by allocate_tables().

static void vp3_decode_flush ( AVCodecContext avctx)
static

Definition at line 256 of file vp3.c.

Referenced by vp3_decode_end().

static int vp3_decode_frame ( AVCodecContext avctx,
void data,
int *  data_size,
AVPacket avpkt 
)
static

Definition at line 1910 of file vp3.c.

static av_cold int vp3_decode_init ( AVCodecContext avctx)
static

Definition at line 1659 of file vp3.c.

static int vp3_dequant ( Vp3DecodeContext s,
Vp3Fragment frag,
int  plane,
int  inter,
DCTELEM  block[64] 
)
inlinestatic

Pull DCT tokens from the 64 levels to decode and dequant the coefficients for the next block in coding order.

Definition at line 1347 of file vp3.c.

Referenced by render_slice().

static void vp3_draw_horiz_band ( Vp3DecodeContext s,
int  y 
)
static

called when all pixels up to row y are complete

Definition at line 1392 of file vp3.c.

Referenced by render_slice().

static int vp3_init_thread_copy ( AVCodecContext avctx)
static

Definition at line 2098 of file vp3.c.

static int vp3_update_thread_context ( AVCodecContext dst,
const AVCodecContext src 
)
static

Definition at line 1857 of file vp3.c.

Variable Documentation

AVCodec ff_vp3_decoder
Initial value:

Definition at line 2396 of file vp3.c.

const uint8_t hilbert_offset[16][2]
static
Initial value:
{
{0,0}, {1,0}, {1,1}, {0,1},
{0,2}, {0,3}, {1,3}, {1,2},
{2,2}, {2,3}, {3,3}, {3,2},
{3,1}, {2,1}, {2,0}, {3,0}
}

Definition at line 118 of file vp3.c.

Referenced by init_block_mapping(), and render_slice().

const int ModeAlphabet[6][CODING_MODE_COUNT]
static

Definition at line 78 of file vp3.c.

Referenced by unpack_modes().