Originally committed as revision 11554 to svn://svn.ffmpeg.org/ffmpeg/trunk
Kostya Shishkov authored on 2008/01/18 16:04:11... | ... |
@@ -1012,6 +1012,8 @@ static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types) |
1012 | 1012 |
|
1013 | 1013 |
s->qscale = r->si.quant; |
1014 | 1014 |
cbp = cbp2 = rv34_decode_mb_header(r, intra_types); |
1015 |
+ r->cbp_luma [s->mb_x + s->mb_y * s->mb_stride] = cbp; |
|
1016 |
+ r->cbp_chroma[s->mb_x + s->mb_y * s->mb_stride] = cbp >> 16; |
|
1015 | 1017 |
|
1016 | 1018 |
if(cbp == -1) |
1017 | 1019 |
return -1; |
... | ... |
@@ -1101,6 +1103,8 @@ static int rv34_decode_slice(RV34DecContext *r, int end, uint8_t* buf, int buf_s |
1101 | 1101 |
r->intra_types_hist = av_realloc(r->intra_types_hist, s->b4_stride * 4 * 2 * sizeof(*r->intra_types_hist)); |
1102 | 1102 |
r->intra_types = r->intra_types_hist + s->b4_stride * 4; |
1103 | 1103 |
r->mb_type = av_realloc(r->mb_type, r->s.mb_stride * r->s.mb_height * sizeof(*r->mb_type)); |
1104 |
+ r->cbp_luma = av_realloc(r->cbp_luma, r->s.mb_stride * r->s.mb_height * sizeof(*r->cbp_luma)); |
|
1105 |
+ r->cbp_chroma = av_realloc(r->cbp_chroma, r->s.mb_stride * r->s.mb_height * sizeof(*r->cbp_chroma)); |
|
1104 | 1106 |
} |
1105 | 1107 |
s->pict_type = r->si.type ? r->si.type : I_TYPE; |
1106 | 1108 |
if(MPV_frame_start(s, s->avctx) < 0) |
... | ... |
@@ -1188,6 +1192,9 @@ int ff_rv34_decode_init(AVCodecContext *avctx) |
1188 | 1188 |
|
1189 | 1189 |
r->mb_type = av_mallocz(r->s.mb_stride * r->s.mb_height * sizeof(*r->mb_type)); |
1190 | 1190 |
|
1191 |
+ r->cbp_luma = av_malloc(r->s.mb_stride * r->s.mb_height * sizeof(*r->cbp_luma)); |
|
1192 |
+ r->cbp_chroma = av_malloc(r->s.mb_stride * r->s.mb_height * sizeof(*r->cbp_chroma)); |
|
1193 |
+ |
|
1191 | 1194 |
if(!intra_vlcs[0].cbppattern[0].bits) |
1192 | 1195 |
rv34_init_tables(); |
1193 | 1196 |
|
... | ... |
@@ -99,6 +99,9 @@ typedef struct RV34DecContext{ |
99 | 99 |
int rv30; ///< indicates which RV variasnt is currently decoded |
100 | 100 |
int rpr; ///< one field size in RV30 slice header |
101 | 101 |
|
102 |
+ uint16_t *cbp_luma; ///< CBP values for luma subblocks |
|
103 |
+ uint8_t *cbp_chroma; ///< CBP values for chroma subblocks |
|
104 |
+ |
|
102 | 105 |
/** 8x8 block available flags (for MV prediction) */ |
103 | 106 |
DECLARE_ALIGNED_8(uint32_t, avail_cache[3*4]); |
104 | 107 |
|