]> git.sesse.net Git - ffmpeg/blobdiff - libswscale/swscale_internal.h
mkv: mark corrupted packets and return them
[ffmpeg] / libswscale / swscale_internal.h
index 8da1201cbcf8d326669fe28f8a4fed7b0a753c75..2a7d2dbd1dff89f8b9666958c12a9f1f6e9d9cdc 100644 (file)
@@ -295,10 +295,10 @@ typedef struct SwsContext {
     int16_t *hChrFilter;          ///< Array of horizontal filter coefficients for chroma     planes.
     int16_t *vLumFilter;          ///< Array of vertical   filter coefficients for luma/alpha planes.
     int16_t *vChrFilter;          ///< Array of vertical   filter coefficients for chroma     planes.
-    int16_t *hLumFilterPos;       ///< Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
-    int16_t *hChrFilterPos;       ///< Array of horizontal filter starting positions for each dst[i] for chroma     planes.
-    int16_t *vLumFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for luma/alpha planes.
-    int16_t *vChrFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for chroma     planes.
+    int32_t *hLumFilterPos;       ///< Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
+    int32_t *hChrFilterPos;       ///< Array of horizontal filter starting positions for each dst[i] for chroma     planes.
+    int32_t *vLumFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for luma/alpha planes.
+    int32_t *vChrFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for chroma     planes.
     int hLumFilterSize;           ///< Horizontal filter size for luma/alpha pixels.
     int hChrFilterSize;           ///< Horizontal filter size for chroma     pixels.
     int vLumFilterSize;           ///< Vertical   filter size for luma/alpha pixels.
@@ -352,10 +352,11 @@ typedef struct SwsContext {
 #define U_TEMP                "11*8+4*4*256*2+24"
 #define V_TEMP                "11*8+4*4*256*2+32"
 #define Y_TEMP                "11*8+4*4*256*2+40"
-#define UV_OFF_PX             "11*8+4*4*256*2+48"
-#define UV_OFF_BYTE           "11*8+4*4*256*2+56"
-#define DITHER16              "11*8+4*4*256*2+64"
-#define DITHER32              "11*8+4*4*256*2+80"
+#define ALP_MMX_FILTER_OFFSET "11*8+4*4*256*2+48"
+#define UV_OFF_PX             "11*8+4*4*256*3+48"
+#define UV_OFF_BYTE           "11*8+4*4*256*3+56"
+#define DITHER16              "11*8+4*4*256*3+64"
+#define DITHER32              "11*8+4*4*256*3+80"
 
     DECLARE_ALIGNED(8, uint64_t, redDither);
     DECLARE_ALIGNED(8, uint64_t, greenDither);
@@ -377,6 +378,7 @@ typedef struct SwsContext {
     DECLARE_ALIGNED(8, uint64_t, u_temp);
     DECLARE_ALIGNED(8, uint64_t, v_temp);
     DECLARE_ALIGNED(8, uint64_t, y_temp);
+    int32_t alpMmxFilter[4 * MAX_FILTER_SIZE];
     // alignment of these values is not necessary, but merely here
     // to maintain the same offset across x8632 and x86-64. Once we
     // use proper offset macros in the asm, they can be removed.
@@ -506,10 +508,10 @@ typedef struct SwsContext {
     /** @{ */
     void (*hyScale)(struct SwsContext *c, int16_t *dst, int dstW,
                     const uint8_t *src, const int16_t *filter,
-                    const int16_t *filterPos, int filterSize);
+                    const int32_t *filterPos, int filterSize);
     void (*hcScale)(struct SwsContext *c, int16_t *dst, int dstW,
                     const uint8_t *src, const int16_t *filter,
-                    const int16_t *filterPos, int filterSize);
+                    const int32_t *filterPos, int filterSize);
     /** @} */
 
     /// Color range conversion function for luma plane if needed.
@@ -612,8 +614,8 @@ const char *sws_format_name(enum PixelFormat format);
     (isRGBinInt(x)              ||     \
      isBGRinInt(x))
 
-#define isALPHA(x)                                            \
-    (av_pix_fmt_descriptors[x].nb_components == 2          || \
+#define isALPHA(x)                                             \
+    (av_pix_fmt_descriptors[x].nb_components == 2          ||  \
      av_pix_fmt_descriptors[x].nb_components == 4)
 
 #define isPacked(x)                                            \
@@ -621,11 +623,19 @@ const char *sws_format_name(enum PixelFormat format);
       !(av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR)) ||  \
      (x) == PIX_FMT_PAL8)
 
-#define isPlanar(x) \
+#define isPlanar(x)                                            \
     (av_pix_fmt_descriptors[x].nb_components >= 2          &&  \
      (av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR))
 
-#define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) ||       \
+#define isPackedRGB(x)                                         \
+    ((av_pix_fmt_descriptors[x].flags                        & \
+     (PIX_FMT_PLANAR | PIX_FMT_RGB)) == PIX_FMT_RGB)
+
+#define isPlanarRGB(x)                                         \
+    ((av_pix_fmt_descriptors[x].flags                        & \
+     (PIX_FMT_PLANAR | PIX_FMT_RGB)) == (PIX_FMT_PLANAR | PIX_FMT_RGB))
+
+#define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL)       || \
                    (av_pix_fmt_descriptors[x].flags & PIX_FMT_PSEUDOPAL) || \
                    (x) == PIX_FMT_Y400A)