diff options
author | Diego Biurrun <diego@biurrun.de> | 2007-10-02 12:16:33 +0000 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2007-10-02 12:16:33 +0000 |
commit | 6c05bab46d913fa5f5383d4702a1e6ba383138ff (patch) | |
tree | 6efa5675d88d7c4c8533b80ed4cf5354cae02abd /libavcodec/ppc/mpegvideo_altivec.c | |
parent | 89523beea45e265d985aace8be79b45e94f21e6b (diff) | |
download | ffmpeg-6c05bab46d913fa5f5383d4702a1e6ba383138ff.tar.gz |
Merge mpegvideo AltiVec code into mpegvideo_altivec.c where it belongs.
Originally committed as revision 10641 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ppc/mpegvideo_altivec.c')
-rw-r--r-- | libavcodec/ppc/mpegvideo_altivec.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/libavcodec/ppc/mpegvideo_altivec.c b/libavcodec/ppc/mpegvideo_altivec.c index 12795e49ff..79dbc35b5c 100644 --- a/libavcodec/ppc/mpegvideo_altivec.c +++ b/libavcodec/ppc/mpegvideo_altivec.c @@ -601,3 +601,48 @@ POWERPC_PERF_START_COUNT(altivec_dct_unquantize_h263_num, 1); } POWERPC_PERF_STOP_COUNT(altivec_dct_unquantize_h263_num, nCoeffs == 63); } + + +extern void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block); +extern void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block); + +void MPV_common_init_ppc(MpegEncContext *s) +{ + if (s->avctx->lowres==0) + { + if ((s->avctx->idct_algo == FF_IDCT_AUTO) || + (s->avctx->idct_algo == FF_IDCT_ALTIVEC)) + { + s->dsp.idct_put = idct_put_altivec; + s->dsp.idct_add = idct_add_altivec; + s->dsp.idct_permutation_type = FF_TRANSPOSE_IDCT_PERM; + } + } + + // Test to make sure that the dct required alignments are met. + if ((((long)(s->q_intra_matrix) & 0x0f) != 0) || + (((long)(s->q_inter_matrix) & 0x0f) != 0)) + { + av_log(s->avctx, AV_LOG_INFO, "Internal Error: q-matrix blocks must be 16-byte aligned " + "to use AltiVec DCT. Reverting to non-AltiVec version.\n"); + return; + } + + if (((long)(s->intra_scantable.inverse) & 0x0f) != 0) + { + av_log(s->avctx, AV_LOG_INFO, "Internal Error: scan table blocks must be 16-byte aligned " + "to use AltiVec DCT. Reverting to non-AltiVec version.\n"); + return; + } + + + if ((s->avctx->dct_algo == FF_DCT_AUTO) || + (s->avctx->dct_algo == FF_DCT_ALTIVEC)) + { +#if 0 /* seems to cause trouble under some circumstances */ + s->dct_quantize = dct_quantize_altivec; +#endif + s->dct_unquantize_h263_intra = dct_unquantize_h263_altivec; + s->dct_unquantize_h263_inter = dct_unquantize_h263_altivec; + } +} |