Merge commit 'c2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Aug 2013 13:10:09 +0000 (15:10 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Aug 2013 13:10:09 +0000 (15:10 +0200)
* commit 'c2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19':
  swscale: ppc: Hide arch-specific initialization details

Conflicts:
libswscale/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libswscale/ppc/swscale_altivec.c
libswscale/ppc/yuv2rgb_altivec.c
libswscale/ppc/yuv2yuv_altivec.c
libswscale/swscale.c
libswscale/swscale_internal.h
libswscale/swscale_unscaled.c
libswscale/utils.c
libswscale/yuv2rgb.c

Simple merge
  #include "libswscale/swscale_internal.h"
  #include "libavutil/attributes.h"
  #include "libavutil/cpu.h"
 +#include "libavutil/pixdesc.h"
  #include "yuv2rgb_altivec.h"
  
+ #if HAVE_ALTIVEC
  #undef PROFILE_THE_BEAST
  #undef INC_SCALING
  
Simple merge
Simple merge
@@@ -850,27 -753,7 +850,27 @@@ void ff_sws_init_output_funcs(SwsContex
                                yuv2packed2_fn *yuv2packed2,
                                yuv2packedX_fn *yuv2packedX,
                                yuv2anyX_fn *yuv2anyX);
- void ff_sws_init_swScale_altivec(SwsContext *c);
+ void ff_sws_init_swscale_ppc(SwsContext *c);
  void ff_sws_init_swscale_x86(SwsContext *c);
  
 +static inline void fillPlane16(uint8_t *plane, int stride, int width, int height, int y,
 +                               int alpha, int bits, const int big_endian)
 +{
 +    int i, j;
 +    uint8_t *ptr = plane + stride * y;
 +    int v = alpha ? 0xFFFF>>(15-bits) : (1<<bits);
 +    for (i = 0; i < height; i++) {
 +#define FILL(wfunc) \
 +        for (j = 0; j < width; j++) {\
 +            wfunc(ptr+2*j, v);\
 +        }
 +        if (big_endian) {
 +            FILL(AV_WB16);
 +        } else {
 +            FILL(AV_WL16);
 +        }
 +        ptr += stride;
 +    }
 +}
 +
  #endif /* SWSCALE_SWSCALE_INTERNAL_H */
@@@ -1320,10 -1091,181 +1320,10 @@@ void ff_get_unscaled_swscale(SwsContex
  
      if (ARCH_BFIN)
          ff_bfin_get_unscaled_swscale(c);
-     if (HAVE_ALTIVEC)
-         ff_swscale_get_unscaled_altivec(c);
+     if (ARCH_PPC)
+         ff_swscale_get_unscaled_ppc(c);
  }
  
 -static void reset_ptr(const uint8_t *src[], int format)
 -{
 -    if (!isALPHA(format))
 -        src[3] = NULL;
 -    if (!isPlanar(format)) {
 -        src[3] = src[2] = NULL;
 -
 -        if (!usePal(format))
 -            src[1] = NULL;
 -    }
 -}
 -
 -static int check_image_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt,
 -                                const int linesizes[4])
 -{
 -    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
 -    int i;
 -
 -    for (i = 0; i < 4; i++) {
 -        int plane = desc->comp[i].plane;
 -        if (!data[plane] || !linesizes[plane])
 -            return 0;
 -    }
 -
 -    return 1;
 -}
 -
 -/**
 - * swscale wrapper, so we don't need to export the SwsContext.
 - * Assumes planar YUV to be in YUV order instead of YVU.
 - */
 -int attribute_align_arg sws_scale(struct SwsContext *c,
 -                                  const uint8_t * const srcSlice[],
 -                                  const int srcStride[], int srcSliceY,
 -                                  int srcSliceH, uint8_t *const dst[],
 -                                  const int dstStride[])
 -{
 -    int i;
 -    const uint8_t *src2[4] = { srcSlice[0], srcSlice[1], srcSlice[2], srcSlice[3] };
 -    uint8_t *dst2[4] = { dst[0], dst[1], dst[2], dst[3] };
 -
 -    // do not mess up sliceDir if we have a "trailing" 0-size slice
 -    if (srcSliceH == 0)
 -        return 0;
 -
 -    if (!check_image_pointers(srcSlice, c->srcFormat, srcStride)) {
 -        av_log(c, AV_LOG_ERROR, "bad src image pointers\n");
 -        return 0;
 -    }
 -    if (!check_image_pointers(dst, c->dstFormat, dstStride)) {
 -        av_log(c, AV_LOG_ERROR, "bad dst image pointers\n");
 -        return 0;
 -    }
 -
 -    if (c->sliceDir == 0 && srcSliceY != 0 && srcSliceY + srcSliceH != c->srcH) {
 -        av_log(c, AV_LOG_ERROR, "Slices start in the middle!\n");
 -        return 0;
 -    }
 -    if (c->sliceDir == 0) {
 -        if (srcSliceY == 0) c->sliceDir = 1; else c->sliceDir = -1;
 -    }
 -
 -    if (usePal(c->srcFormat)) {
 -        for (i = 0; i < 256; i++) {
 -            int p, r, g, b, y, u, v;
 -            if (c->srcFormat == AV_PIX_FMT_PAL8) {
 -                p = ((const uint32_t *)(srcSlice[1]))[i];
 -                r = (p >> 16) & 0xFF;
 -                g = (p >>  8) & 0xFF;
 -                b =  p        & 0xFF;
 -            } else if (c->srcFormat == AV_PIX_FMT_RGB8) {
 -                r = ( i >> 5     ) * 36;
 -                g = ((i >> 2) & 7) * 36;
 -                b = ( i       & 3) * 85;
 -            } else if (c->srcFormat == AV_PIX_FMT_BGR8) {
 -                b = ( i >> 6     ) * 85;
 -                g = ((i >> 3) & 7) * 36;
 -                r = ( i       & 7) * 36;
 -            } else if (c->srcFormat == AV_PIX_FMT_RGB4_BYTE) {
 -                r = ( i >> 3     ) * 255;
 -                g = ((i >> 1) & 3) * 85;
 -                b = ( i       & 1) * 255;
 -            } else if (c->srcFormat == AV_PIX_FMT_GRAY8 ||
 -                      c->srcFormat == AV_PIX_FMT_Y400A) {
 -                r = g = b = i;
 -            } else {
 -                assert(c->srcFormat == AV_PIX_FMT_BGR4_BYTE);
 -                b = ( i >> 3     ) * 255;
 -                g = ((i >> 1) & 3) * 85;
 -                r = ( i       & 1) * 255;
 -            }
 -            y = av_clip_uint8((RY * r + GY * g + BY * b + ( 33 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
 -            u = av_clip_uint8((RU * r + GU * g + BU * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
 -            v = av_clip_uint8((RV * r + GV * g + BV * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
 -            c->pal_yuv[i] = y + (u << 8) + (v << 16);
 -
 -            switch (c->dstFormat) {
 -            case AV_PIX_FMT_BGR32:
 -#if !HAVE_BIGENDIAN
 -            case AV_PIX_FMT_RGB24:
 -#endif
 -                c->pal_rgb[i] =  r + (g << 8) + (b << 16);
 -                break;
 -            case AV_PIX_FMT_BGR32_1:
 -#if HAVE_BIGENDIAN
 -            case AV_PIX_FMT_BGR24:
 -#endif
 -                c->pal_rgb[i] = (r + (g << 8) + (b << 16)) << 8;
 -                break;
 -            case AV_PIX_FMT_RGB32_1:
 -#if HAVE_BIGENDIAN
 -            case AV_PIX_FMT_RGB24:
 -#endif
 -                c->pal_rgb[i] = (b + (g << 8) + (r << 16)) << 8;
 -                break;
 -            case AV_PIX_FMT_RGB32:
 -#if !HAVE_BIGENDIAN
 -            case AV_PIX_FMT_BGR24:
 -#endif
 -            default:
 -                c->pal_rgb[i] =  b + (g << 8) + (r << 16);
 -            }
 -        }
 -    }
 -
 -    // copy strides, so they can safely be modified
 -    if (c->sliceDir == 1) {
 -        // slices go from top to bottom
 -        int srcStride2[4] = { srcStride[0], srcStride[1], srcStride[2],
 -                              srcStride[3] };
 -        int dstStride2[4] = { dstStride[0], dstStride[1], dstStride[2],
 -                              dstStride[3] };
 -
 -        reset_ptr(src2, c->srcFormat);
 -        reset_ptr((const uint8_t **) dst2, c->dstFormat);
 -
 -        /* reset slice direction at end of frame */
 -        if (srcSliceY + srcSliceH == c->srcH)
 -            c->sliceDir = 0;
 -
 -        return c->swScale(c, src2, srcStride2, srcSliceY, srcSliceH, dst2,
 -                          dstStride2);
 -    } else {
 -        // slices go from bottom to top => we flip the image internally
 -        int srcStride2[4] = { -srcStride[0], -srcStride[1], -srcStride[2],
 -                              -srcStride[3] };
 -        int dstStride2[4] = { -dstStride[0], -dstStride[1], -dstStride[2],
 -                              -dstStride[3] };
 -
 -        src2[0] += (srcSliceH - 1) * srcStride[0];
 -        if (!usePal(c->srcFormat))
 -            src2[1] += ((srcSliceH >> c->chrSrcVSubSample) - 1) * srcStride[1];
 -        src2[2] += ((srcSliceH >> c->chrSrcVSubSample) - 1) * srcStride[2];
 -        src2[3] += (srcSliceH - 1) * srcStride[3];
 -        dst2[0] += ( c->dstH                         - 1) * dstStride[0];
 -        dst2[1] += ((c->dstH >> c->chrDstVSubSample) - 1) * dstStride[1];
 -        dst2[2] += ((c->dstH >> c->chrDstVSubSample) - 1) * dstStride[2];
 -        dst2[3] += ( c->dstH                         - 1) * dstStride[3];
 -
 -        reset_ptr(src2, c->srcFormat);
 -        reset_ptr((const uint8_t **) dst2, c->dstFormat);
 -
 -        /* reset slice direction at end of frame */
 -        if (!srcSliceY)
 -            c->sliceDir = 0;
 -
 -        return c->swScale(c, src2, srcStride2, c->srcH-srcSliceY-srcSliceH,
 -                          srcSliceH, dst2, dstStride2);
 -    }
 -}
 -
  /* Convert the palette to the same packed 32-bit format as the palette */
  void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst,
                                     int num_pixels, const uint8_t *palette)
@@@ -991,13 -806,9 +991,13 @@@ int sws_setColorspaceDetails(struct Sws
                               contrast, saturation);
      // FIXME factorize
  
-     if (PPC_ALTIVEC(av_get_cpu_flags()))
-         ff_yuv2rgb_init_tables_altivec(c, inv_table, brightness,
-                                        contrast, saturation);
+     if (ARCH_PPC)
+         ff_yuv2rgb_init_tables_ppc(c, inv_table, brightness,
+                                    contrast, saturation);
 +    }
 +
 +    fill_rgb2yuv_table(c, table, dstRange);
 +
      return 0;
  }
  
Simple merge