Mercurial > libavcodec.hg
comparison mpegvideo.c @ 6658:7ecd59aa5757 libavcodec
Unroll codepath
Patch by strites: strites gmail com
Original thread: [FFmpeg-devel] [PATCH] Patch cleanup for MPEG 1 & 2 optimizations
Date: 04/06/2008 11:32 PM
author | benoit |
---|---|
date | Mon, 21 Apr 2008 08:30:54 +0000 |
parents | b03c23f8f268 |
children | 8f656b589911 |
comparison
equal
deleted
inserted
replaced
6657:2574def95b50 | 6658:7ecd59aa5757 |
---|---|
1735 s->mv : motion vector | 1735 s->mv : motion vector |
1736 s->interlaced_dct : true if interlaced dct used (mpeg2) | 1736 s->interlaced_dct : true if interlaced dct used (mpeg2) |
1737 */ | 1737 */ |
1738 static av_always_inline | 1738 static av_always_inline |
1739 void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], | 1739 void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], |
1740 int lowres_flag) | 1740 int lowres_flag, int is_mpeg12) |
1741 { | 1741 { |
1742 int mb_x, mb_y; | 1742 int mb_x, mb_y; |
1743 const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; | 1743 const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; |
1744 #ifdef HAVE_XVMC | 1744 #ifdef HAVE_XVMC |
1745 if(s->avctx->xvmc_acceleration){ | 1745 if(s->avctx->xvmc_acceleration){ |
1762 | 1762 |
1763 s->current_picture.qscale_table[mb_xy]= s->qscale; | 1763 s->current_picture.qscale_table[mb_xy]= s->qscale; |
1764 | 1764 |
1765 /* update DC predictors for P macroblocks */ | 1765 /* update DC predictors for P macroblocks */ |
1766 if (!s->mb_intra) { | 1766 if (!s->mb_intra) { |
1767 if (s->h263_pred || s->h263_aic) { | 1767 if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) { |
1768 if(s->mbintra_table[mb_xy]) | 1768 if(s->mbintra_table[mb_xy]) |
1769 ff_clean_intra_table_entries(s); | 1769 ff_clean_intra_table_entries(s); |
1770 } else { | 1770 } else { |
1771 s->last_dc[0] = | 1771 s->last_dc[0] = |
1772 s->last_dc[1] = | 1772 s->last_dc[1] = |
1773 s->last_dc[2] = 128 << s->intra_dc_precision; | 1773 s->last_dc[2] = 128 << s->intra_dc_precision; |
1774 } | 1774 } |
1775 } | 1775 } |
1776 else if (s->h263_pred || s->h263_aic) | 1776 else if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) |
1777 s->mbintra_table[mb_xy]=1; | 1777 s->mbintra_table[mb_xy]=1; |
1778 | 1778 |
1779 if ((s->flags&CODEC_FLAG_PSNR) || !(s->encoding && (s->intra_only || s->pict_type==FF_B_TYPE) && s->avctx->mb_decision != FF_MB_DECISION_RD)) { //FIXME precalc | 1779 if ((s->flags&CODEC_FLAG_PSNR) || !(s->encoding && (s->intra_only || s->pict_type==FF_B_TYPE) && s->avctx->mb_decision != FF_MB_DECISION_RD)) { //FIXME precalc |
1780 uint8_t *dest_y, *dest_cb, *dest_cr; | 1780 uint8_t *dest_y, *dest_cb, *dest_cr; |
1781 int dct_linesize, dct_offset; | 1781 int dct_linesize, dct_offset; |
1886 add_dequant_dct(s, block[5], 5, dest_cr, dct_linesize, s->chroma_qscale); | 1886 add_dequant_dct(s, block[5], 5, dest_cr, dct_linesize, s->chroma_qscale); |
1887 add_dequant_dct(s, block[6], 6, dest_cb + dct_offset, dct_linesize, s->chroma_qscale); | 1887 add_dequant_dct(s, block[6], 6, dest_cb + dct_offset, dct_linesize, s->chroma_qscale); |
1888 add_dequant_dct(s, block[7], 7, dest_cr + dct_offset, dct_linesize, s->chroma_qscale); | 1888 add_dequant_dct(s, block[7], 7, dest_cr + dct_offset, dct_linesize, s->chroma_qscale); |
1889 } | 1889 } |
1890 } | 1890 } |
1891 } else if(s->codec_id != CODEC_ID_WMV2){ | 1891 } else if(is_mpeg12 || (s->codec_id != CODEC_ID_WMV2)){ |
1892 add_dct(s, block[0], 0, dest_y , dct_linesize); | 1892 add_dct(s, block[0], 0, dest_y , dct_linesize); |
1893 add_dct(s, block[1], 1, dest_y + block_size, dct_linesize); | 1893 add_dct(s, block[1], 1, dest_y + block_size, dct_linesize); |
1894 add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize); | 1894 add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize); |
1895 add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize); | 1895 add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize); |
1896 | 1896 |
1977 } | 1977 } |
1978 } | 1978 } |
1979 } | 1979 } |
1980 | 1980 |
1981 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]){ | 1981 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]){ |
1982 if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1); | 1982 #ifndef CONFIG_SMALL |
1983 else MPV_decode_mb_internal(s, block, 0); | 1983 if(s->out_format == FMT_MPEG1) { |
1984 if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 1); | |
1985 else MPV_decode_mb_internal(s, block, 0, 1); | |
1986 } else | |
1987 #endif | |
1988 if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 0); | |
1989 else MPV_decode_mb_internal(s, block, 0, 0); | |
1984 } | 1990 } |
1985 | 1991 |
1986 /** | 1992 /** |
1987 * | 1993 * |
1988 * @param h is the normal height, this will be reduced automatically if needed for the last row | 1994 * @param h is the normal height, this will be reduced automatically if needed for the last row |