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