diff options
author | Mans Rullgard <mans@mansr.com> | 2012-07-27 17:00:38 +0100 |
---|---|---|
committer | Mans Rullgard <mans@mansr.com> | 2012-07-29 21:30:47 +0100 |
commit | 591766a3a9c88614b9cb0ed90e25dc6e7d883752 (patch) | |
tree | 701f2d7516c06059ab069dc54b75829cb96cad43 | |
parent | 87cf481aa88b89db8dbbb13dc19c9b4cb35b654a (diff) | |
download | ffmpeg-591766a3a9c88614b9cb0ed90e25dc6e7d883752.tar.gz |
eamad: remove use of MpegEncContext
There is no sense in pulling in this monster struct just for
a handful of fields. The code does not call any functions
expecting an MpegEncContext.
Signed-off-by: Mans Rullgard <mans@mansr.com>
-rw-r--r-- | libavcodec/eamad.c | 92 |
1 files changed, 46 insertions, 46 deletions
diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c index 1daef7e673..b738f9458c 100644 --- a/libavcodec/eamad.c +++ b/libavcodec/eamad.c @@ -42,12 +42,18 @@ #define MADe_TAG MKTAG('M', 'A', 'D', 'e') /* MAD lqp-frame */ typedef struct MadContext { - MpegEncContext s; + AVCodecContext *avctx; + DSPContext dsp; AVFrame frame; AVFrame last_frame; + GetBitContext gb; void *bitstream_buf; unsigned int bitstream_buf_size; DECLARE_ALIGNED(16, DCTELEM, block)[64]; + ScanTable scantable; + uint16_t quant_matrix[64]; + int mb_x; + int mb_y; } MadContext; static void bswap16_buf(uint16_t *dst, const uint16_t *src, int count) @@ -59,14 +65,13 @@ static void bswap16_buf(uint16_t *dst, const uint16_t *src, int count) static av_cold int decode_init(AVCodecContext *avctx) { - MadContext *t = avctx->priv_data; - MpegEncContext *s = &t->s; + MadContext *s = avctx->priv_data; s->avctx = avctx; avctx->pix_fmt = PIX_FMT_YUV420P; if (avctx->idct_algo == FF_IDCT_AUTO) avctx->idct_algo = FF_IDCT_EA; ff_dsputil_init(&s->dsp, avctx); - ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct); + ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct); ff_mpeg12_init_vlcs(); return 0; } @@ -83,13 +88,12 @@ static inline void comp(unsigned char *dst, int dst_stride, static inline void comp_block(MadContext *t, int mb_x, int mb_y, int j, int mv_x, int mv_y, int add) { - MpegEncContext *s = &t->s; if (j < 4) { comp(t->frame.data[0] + (mb_y*16 + ((j&2)<<2))*t->frame.linesize[0] + mb_x*16 + ((j&1)<<3), t->frame.linesize[0], t->last_frame.data[0] + (mb_y*16 + ((j&2)<<2) + mv_y)*t->last_frame.linesize[0] + mb_x*16 + ((j&1)<<3) + mv_x, t->last_frame.linesize[0], add); - } else if (!(s->avctx->flags & CODEC_FLAG_GRAY)) { + } else if (!(t->avctx->flags & CODEC_FLAG_GRAY)) { int index = j - 3; comp(t->frame.data[index] + (mb_y*8)*t->frame.linesize[index] + mb_x * 8, t->frame.linesize[index], @@ -100,26 +104,24 @@ static inline void comp_block(MadContext *t, int mb_x, int mb_y, static inline void idct_put(MadContext *t, DCTELEM *block, int mb_x, int mb_y, int j) { - MpegEncContext *s = &t->s; if (j < 4) { - s->dsp.idct_put( + t->dsp.idct_put( t->frame.data[0] + (mb_y*16 + ((j&2)<<2))*t->frame.linesize[0] + mb_x*16 + ((j&1)<<3), t->frame.linesize[0], block); - } else if (!(s->avctx->flags & CODEC_FLAG_GRAY)) { + } else if (!(t->avctx->flags & CODEC_FLAG_GRAY)) { int index = j - 3; - s->dsp.idct_put( + t->dsp.idct_put( t->frame.data[index] + (mb_y*8)*t->frame.linesize[index] + mb_x*8, t->frame.linesize[index], block); } } -static inline void decode_block_intra(MadContext * t, DCTELEM * block) +static inline void decode_block_intra(MadContext *s, DCTELEM * block) { - MpegEncContext *s = &t->s; int level, i, j, run; RLTable *rl = &ff_rl_mpeg1; - const uint8_t *scantable = s->intra_scantable.permutated; - int16_t *quant_matrix = s->intra_matrix; + const uint8_t *scantable = s->scantable.permutated; + int16_t *quant_matrix = s->quant_matrix; block[0] = (128 + get_sbits(&s->gb, 8)) * quant_matrix[0]; @@ -184,9 +186,8 @@ static int decode_motion(GetBitContext *gb) return value; } -static void decode_mb(MadContext *t, int inter) +static void decode_mb(MadContext *s, int inter) { - MpegEncContext *s = &t->s; int mv_map = 0; int mv_x, mv_y; int j; @@ -205,28 +206,27 @@ static void decode_mb(MadContext *t, int inter) for (j=0; j<6; j++) { if (mv_map & (1<<j)) { // mv_x and mv_y are guarded by mv_map int add = 2*decode_motion(&s->gb); - comp_block(t, s->mb_x, s->mb_y, j, mv_x, mv_y, add); + comp_block(s, s->mb_x, s->mb_y, j, mv_x, mv_y, add); } else { - s->dsp.clear_block(t->block); - decode_block_intra(t, t->block); - idct_put(t, t->block, s->mb_x, s->mb_y, j); + s->dsp.clear_block(s->block); + decode_block_intra(s, s->block); + idct_put(s, s->block, s->mb_x, s->mb_y, j); } } } -static void calc_intra_matrix(MadContext *t, int qscale) +static void calc_quant_matrix(MadContext *s, int qscale) { - MpegEncContext *s = &t->s; int i; if (s->avctx->idct_algo == FF_IDCT_EA) { - s->intra_matrix[0] = (ff_inv_aanscales[0]*ff_mpeg1_default_intra_matrix[0]) >> 11; + s->quant_matrix[0] = (ff_inv_aanscales[0]*ff_mpeg1_default_intra_matrix[0]) >> 11; for (i=1; i<64; i++) - s->intra_matrix[i] = (ff_inv_aanscales[i]*ff_mpeg1_default_intra_matrix[i]*qscale + 32) >> 10; + s->quant_matrix[i] = (ff_inv_aanscales[i]*ff_mpeg1_default_intra_matrix[i]*qscale + 32) >> 10; } else { - s->intra_matrix[0] = ff_mpeg1_default_intra_matrix[0]; + s->quant_matrix[0] = ff_mpeg1_default_intra_matrix[0]; for (i=1; i<64; i++) - s->intra_matrix[i] = (ff_mpeg1_default_intra_matrix[i]*qscale) << 1; + s->quant_matrix[i] = (ff_mpeg1_default_intra_matrix[i]*qscale) << 1; } } @@ -237,8 +237,8 @@ static int decode_frame(AVCodecContext *avctx, const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; const uint8_t *buf_end = buf+buf_size; - MadContext *t = avctx->priv_data; - MpegEncContext *s = &t->s; + MadContext *s = avctx->priv_data; + int width, height; int chunk_type; int inter; @@ -255,42 +255,42 @@ static int decode_frame(AVCodecContext *avctx, av_reduce(&avctx->time_base.num, &avctx->time_base.den, AV_RL16(&buf[6]), 1000, 1<<30); - s->width = AV_RL16(&buf[8]); - s->height = AV_RL16(&buf[10]); - calc_intra_matrix(t, buf[13]); + width = AV_RL16(&buf[8]); + height = AV_RL16(&buf[10]); + calc_quant_matrix(s, buf[13]); buf += 16; - if (avctx->width != s->width || avctx->height != s->height) { - if (av_image_check_size(s->width, s->height, 0, avctx) < 0) + if (avctx->width != width || avctx->height != height) { + if (av_image_check_size(width, height, 0, avctx) < 0) return -1; - avcodec_set_dimensions(avctx, s->width, s->height); - if (t->frame.data[0]) - avctx->release_buffer(avctx, &t->frame); + avcodec_set_dimensions(avctx, width, height); + if (s->frame.data[0]) + avctx->release_buffer(avctx, &s->frame); } - t->frame.reference = 1; - if (!t->frame.data[0]) { - if (avctx->get_buffer(avctx, &t->frame) < 0) { + s->frame.reference = 1; + if (!s->frame.data[0]) { + if (avctx->get_buffer(avctx, &s->frame) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } } - av_fast_malloc(&t->bitstream_buf, &t->bitstream_buf_size, (buf_end-buf) + FF_INPUT_BUFFER_PADDING_SIZE); - if (!t->bitstream_buf) + av_fast_malloc(&s->bitstream_buf, &s->bitstream_buf_size, (buf_end-buf) + FF_INPUT_BUFFER_PADDING_SIZE); + if (!s->bitstream_buf) return AVERROR(ENOMEM); - bswap16_buf(t->bitstream_buf, (const uint16_t*)buf, (buf_end-buf)/2); - init_get_bits(&s->gb, t->bitstream_buf, 8*(buf_end-buf)); + bswap16_buf(s->bitstream_buf, (const uint16_t*)buf, (buf_end-buf)/2); + init_get_bits(&s->gb, s->bitstream_buf, 8*(buf_end-buf)); for (s->mb_y=0; s->mb_y < (avctx->height+15)/16; s->mb_y++) for (s->mb_x=0; s->mb_x < (avctx->width +15)/16; s->mb_x++) - decode_mb(t, inter); + decode_mb(s, inter); *data_size = sizeof(AVFrame); - *(AVFrame*)data = t->frame; + *(AVFrame*)data = s->frame; if (chunk_type != MADe_TAG) - FFSWAP(AVFrame, t->frame, t->last_frame); + FFSWAP(AVFrame, s->frame, s->last_frame); return buf_size; } |