58 "Insufficient extradata - need at least %d bytes, got %d\n",
68 mb_size = ((w + 15) >> 4) * ((h + 15) >> 4);
83 for(j = 0; j < 4; j+= 2){
89 for(k = 0; k < 2; k++){
123 return rv30_p_types[code];
125 return rv30_b_types[code];
129 const int stride,
const int lim)
134 for(i = 0; i < 4; i++){
135 diff = ((src[-2*
step] - src[1*
step]) - (src[-1*step] - src[0*step])*4) >> 3;
136 diff = av_clip(diff, -lim, lim);
137 src[-1*
step] = cm[src[-1*
step] + diff];
138 src[ 0*
step] = cm[src[ 0*
step] - diff];
149 int loc_lim, cur_lim, left_lim = 0, top_lim = 0;
152 for(mb_x = 0; mb_x < s->
mb_width; mb_x++, mb_pos++){
164 for(mb_x = 0; mb_x < s->
mb_width; mb_x++, mb_pos++){
168 for(j = 0; j < 16; j += 4){
170 for(i = !mb_x; i < 4; i++, Y += 4){
175 else if(!i && r->
deblock_coefs[mb_pos - 1] & (1 << (ij + 3)))
183 for(k = 0; k < 2; k++){
184 int cur_cbp, left_cbp = 0;
185 cur_cbp = (r->
cbp_chroma[mb_pos] >> (k*4)) & 0xF;
187 left_cbp = (r->
cbp_chroma[mb_pos - 1] >> (k*4)) & 0xF;
188 for(j = 0; j < 8; j += 4){
190 for(i = !mb_x; i < 2; i++, C += 4){
191 int ij = i + (j >> 1);
193 if (cur_cbp & (1 << ij))
195 else if(!i && left_cbp & (1 << (ij + 1)))
197 else if( i && cur_cbp & (1 << (ij - 1)))
206 for(mb_x = 0; mb_x < s->
mb_width; mb_x++, mb_pos++){
210 for(j = 4*!row; j < 16; j += 4){
212 for(i = 0; i < 4; i++, Y += 4){
225 for(k = 0; k < 2; k++){
226 int cur_cbp, top_cbp = 0;
227 cur_cbp = (r->
cbp_chroma[mb_pos] >> (k*4)) & 0xF;
230 for(j = 4*!row; j < 8; j += 4){
232 for(i = 0; i < 2; i++, C += 4){
233 int ij = i + (j >> 1);
237 else if(!j && top_cbp & (1 << (ij + 2)))
239 else if( j && cur_cbp & (1 << (ij - 2)))
static const uint8_t rv30_luma_dc_quant[32]
DC quantizer mapping for RV30.
int(* decode_intra_types)(struct RV34DecContext *r, GetBitContext *gb, int8_t *dst)
void(* loop_filter)(struct RV34DecContext *r, int row)
#define IS_SEPARATE_DC(a)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
B-frame macroblock, forward prediction.
static const uint8_t rv30_loop_filt_lim[32]
Loop filter limits are taken from this table.
Bidirectionally predicted B-frame macroblock, no motion vectors.
static unsigned svq3_get_ue_golomb(GetBitContext *gb)
static av_cold int rv30_decode_init(AVCodecContext *avctx)
Initialize decoder.
RV30 and RV40 decoder common data declarations.
const uint8_t * luma_dc_quant_p
luma subblock DC quantizer for interframes
static int rv30_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t *dst)
Decode 4x4 intra types array.
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
uint16_t * deblock_coefs
deblock coefficients for each macroblock
static int rv30_decode_mb_info(RV34DecContext *r)
Decode macroblock information.
enum AVPixelFormat ff_pixfmt_list_420[]
static int init(AVCodecParserContext *s)
int quant
quantizer used for this slice
int(* parse_slice_header)(struct RV34DecContext *r, GetBitContext *gb, SliceInfo *si)
static const uint8_t rv30_itype_from_context[900]
This table is used for retrieving the current intra type based on its neighbors and adjustment provid...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
void ff_mpeg_flush(AVCodecContext *avctx)
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Intra macroblock with DCs in a separate 4x4 block.
Picture * current_picture_ptr
pointer to the current picture
#define CODEC_CAP_FRAME_THREADS
static const uint8_t rv30_itype_code[9 *9 *2]
This table is used for storing the differences between the predicted and the real intra type...
uint32_t * mb_type
macroblock type table mb_type_base + mb_width + 2
int ff_rv34_decode_init_thread_copy(AVCodecContext *avctx)
essential slice information
static void rv30_loop_filter(RV34DecContext *r, int row)
main external API structure.
static void close(AVCodecParserContext *s)
int height
picture size. must be a multiple of 16
static void rv30_weak_loop_filter(uint8_t *src, const int step, const int stride, const int lim)
P-frame macroblock, 8x8 motion compensation partitions.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
Initialize decoder.
int ff_rv34_decode_frame(AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt)
int intra_types_stride
block types array stride
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
P-frame macroblock, one motion frame.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int8_t * qscale_table
QP table.
av_cold int ff_rv34_decode_end(AVCodecContext *avctx)
struct AVCodecContext * avctx
int(* decode_mb_info)(struct RV34DecContext *r)
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
static av_cold void flush(AVCodecContext *avctx)
Flush (reset) the frame ID after seeking.
B-frame macroblock, backward prediction.
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.
static int rv30_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceInfo *si)
int linesize
line size, in bytes, may be different from width
const uint8_t * luma_dc_quant_i
luma subblock DC quantizer for intraframes
int rpr
one field size in RV30 slice header
int type
slice type (intra, inter)
miscellaneous RV30 tables
int rv30
indicates which RV variasnt is currently decoded
int uvlinesize
line size, for chroma in bytes, may be different from width
struct RV34DecContext RV34DecContext
decoder context
uint8_t * cbp_chroma
CBP values for chroma subblocks.