summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/dsputil.c
diff options
context:
space:
mode:
authorJuergen Keil <jkeil@users.sourceforge.net>2001-08-31 14:32:24 +0000
committerJuergen Keil <jkeil@users.sourceforge.net>2001-08-31 14:32:24 +0000
commit0bfbbc13906c4ca2c8d28aa22803a2594a9634b1 (patch)
treeeaa4ba0f94ea230865705de18315afcf94d8a405 /src/libffmpeg/libavcodec/dsputil.c
parent2d3f4a1d87de306103990f1c8690d4e997e45db3 (diff)
downloadxine-lib-0bfbbc13906c4ca2c8d28aa22803a2594a9634b1.tar.gz
xine-lib-0bfbbc13906c4ca2c8d28aa22803a2594a9634b1.tar.bz2
Add mediaLib acceleration for UltarSPARCs to ffmpeg's libavcodec
CVS patchset: 531 CVS date: 2001/08/31 14:32:24
Diffstat (limited to 'src/libffmpeg/libavcodec/dsputil.c')
-rw-r--r--src/libffmpeg/libavcodec/dsputil.c52
1 files changed, 39 insertions, 13 deletions
diff --git a/src/libffmpeg/libavcodec/dsputil.c b/src/libffmpeg/libavcodec/dsputil.c
index abbca19da..da8b24941 100644
--- a/src/libffmpeg/libavcodec/dsputil.c
+++ b/src/libffmpeg/libavcodec/dsputil.c
@@ -413,6 +413,8 @@ void block_permute(INT16 *block)
void dsputil_init(void)
{
int i, j;
+ int use_permuted_mmx_idct;
+ int accel_dsputil;
for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
for(i=0;i<MAX_NEG_CROP;i++) {
@@ -435,22 +437,46 @@ void dsputil_init(void)
pix_abs16x16_xy2 = pix_abs16x16_xy2_c;
av_fdct = jpeg_fdct_ifast;
- /* permute for IDCT */
- for(i=0;i<64;i++) {
- j = zigzag_direct[i];
- zigzag_direct[i] = block_permute_op(j);
- j = ff_alternate_horizontal_scan[i];
- ff_alternate_horizontal_scan[i] = block_permute_op(j);
- j = ff_alternate_vertical_scan[i];
- ff_alternate_vertical_scan[i] = block_permute_op(j);
- }
- block_permute(default_intra_matrix);
- block_permute(default_non_intra_matrix);
+ use_permuted_mmx_idct = 1;
+ accel_dsputil = 0;
#ifdef HAVE_MMX
- dsputil_init_mmx();
+ if (!accel_dsputil) {
+ dsputil_init_mmx();
+ accel_dsputil = 1;
+ /* printf("AVCODEC: Using mmx idct\n"); */
+ }
#endif
#ifdef ARCH_ARMV4L
- dsputil_init_armv4l();
+ if (!accel_dsputil) {
+ dsputil_init_armv4l();
+ accel_dsputil = 1;
+ /* printf("AVCODEC: Using armv4l idct\n"); */
+ }
+#endif
+#ifdef HAVE_MLIB
+ if (!accel_dsputil) {
+ dsputil_init_mlib();
+ accel_dsputil = 1;
+ use_permuted_mmx_idct = 0;
+ /* printf("AVCODEC: Using mediaLib idct\n"); */
+ }
#endif
+ if (!accel_dsputil) {
+ /* printf("AVCODEC: Using C idct\n"); */
+ }
+
+ if (use_permuted_mmx_idct) {
+ /* permute for IDCT */
+ for(i=0;i<64;i++) {
+ j = zigzag_direct[i];
+ zigzag_direct[i] = block_permute_op(j);
+ j = ff_alternate_horizontal_scan[i];
+ ff_alternate_horizontal_scan[i] = block_permute_op(j);
+ j = ff_alternate_vertical_scan[i];
+ ff_alternate_vertical_scan[i] = block_permute_op(j);
+ }
+ block_permute(default_intra_matrix);
+ block_permute(default_non_intra_matrix);
+ }
}