Browse Source

swscale: add GBRAP14 format support

Paul B Mahol 1 year ago
parent
commit
29b673bdcf

+ 2 - 0
libavcodec/raw.c

@@ -206,6 +206,8 @@ static const PixelFormatTag raw_pix_fmt_tags[] = {
     { AV_PIX_FMT_GBRAP10BE,    MKTAG(10 , 00 , '4', 'G') },
     { AV_PIX_FMT_GBRAP12LE,    MKTAG('G', '4', 00 , 12 ) },
     { AV_PIX_FMT_GBRAP12BE,    MKTAG(12 , 00 , '4', 'G') },
+    { AV_PIX_FMT_GBRAP14LE,    MKTAG('G', '4', 00 , 14 ) },
+    { AV_PIX_FMT_GBRAP14BE,    MKTAG(14 , 00 , '4', 'G') },
     { AV_PIX_FMT_GBRAP16LE,    MKTAG('G', '4', 00 , 16 ) },
     { AV_PIX_FMT_GBRAP16BE,    MKTAG(16 , 00 , '4', 'G') },
 

+ 2 - 0
libavformat/nut.c

@@ -184,6 +184,8 @@ const AVCodecTag ff_nut_video_tags[] = {
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(10 , 00 , '4', 'G') },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 12 ) },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(12 , 00 , '4', 'G') },
+    { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 14 ) },
+    { AV_CODEC_ID_RAWVIDEO,         MKTAG(14 , 00 , '4', 'G') },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 16 ) },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(16 , 00 , '4', 'G') },
 

+ 7 - 0
libswscale/input.c

@@ -1149,6 +1149,7 @@ rgb9plus_planar_funcs(16)
 
 rgb9plus_planar_transparency_funcs(10)
 rgb9plus_planar_transparency_funcs(12)
+rgb9plus_planar_transparency_funcs(14)
 rgb9plus_planar_transparency_funcs(16)
 
 #define rgbf32_planar_funcs_endian(endian_name, endian)                                             \
@@ -1326,6 +1327,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12LE:
         c->readChrPlanar = planar_rgb12le_to_uv;
         break;
+    case AV_PIX_FMT_GBRAP14LE:
     case AV_PIX_FMT_GBRP14LE:
         c->readChrPlanar = planar_rgb14le_to_uv;
         break;
@@ -1348,6 +1350,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12BE:
         c->readChrPlanar = planar_rgb12be_to_uv;
         break;
+    case AV_PIX_FMT_GBRAP14BE:
     case AV_PIX_FMT_GBRP14BE:
         c->readChrPlanar = planar_rgb14be_to_uv;
         break;
@@ -1686,6 +1689,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12LE:
         c->readLumPlanar = planar_rgb12le_to_y;
         break;
+    case AV_PIX_FMT_GBRAP14LE:
+        c->readAlpPlanar = planar_rgb14le_to_a;
     case AV_PIX_FMT_GBRP14LE:
         c->readLumPlanar = planar_rgb14le_to_y;
         break;
@@ -1712,6 +1717,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12BE:
         c->readLumPlanar = planar_rgb12be_to_y;
         break;
+    case AV_PIX_FMT_GBRAP14BE:
+        c->readAlpPlanar = planar_rgb14be_to_a;
     case AV_PIX_FMT_GBRP14BE:
         c->readLumPlanar = planar_rgb14be_to_y;
         break;

+ 2 - 0
libswscale/output.c

@@ -3047,6 +3047,8 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,
         case AV_PIX_FMT_GBRAP10LE:
         case AV_PIX_FMT_GBRAP12BE:
         case AV_PIX_FMT_GBRAP12LE:
+        case AV_PIX_FMT_GBRAP14BE:
+        case AV_PIX_FMT_GBRAP14LE:
             *yuv2anyX = yuv2gbrp_full_X_c;
             break;
         case AV_PIX_FMT_GBRP16BE:

+ 3 - 0
libswscale/swscale_unscaled.c

@@ -2073,6 +2073,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
          dstFormat == AV_PIX_FMT_GBRP16LE || dstFormat == AV_PIX_FMT_GBRP16BE ||
          dstFormat == AV_PIX_FMT_GBRAP10LE || dstFormat == AV_PIX_FMT_GBRAP10BE ||
          dstFormat == AV_PIX_FMT_GBRAP12LE || dstFormat == AV_PIX_FMT_GBRAP12BE ||
+         dstFormat == AV_PIX_FMT_GBRAP14LE || dstFormat == AV_PIX_FMT_GBRAP14BE ||
          dstFormat == AV_PIX_FMT_GBRAP16LE || dstFormat == AV_PIX_FMT_GBRAP16BE ))
         c->convert_unscaled = Rgb16ToPlanarRgb16Wrapper;
 
@@ -2083,6 +2084,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
          srcFormat == AV_PIX_FMT_GBRP14LE || srcFormat == AV_PIX_FMT_GBRP14BE ||
          srcFormat == AV_PIX_FMT_GBRAP10LE || srcFormat == AV_PIX_FMT_GBRAP10BE ||
          srcFormat == AV_PIX_FMT_GBRAP12LE || srcFormat == AV_PIX_FMT_GBRAP12BE ||
+         srcFormat == AV_PIX_FMT_GBRAP14LE || srcFormat == AV_PIX_FMT_GBRAP14BE ||
          srcFormat == AV_PIX_FMT_GBRAP16LE || srcFormat == AV_PIX_FMT_GBRAP16BE) &&
         (dstFormat == AV_PIX_FMT_RGB48LE  || dstFormat == AV_PIX_FMT_RGB48BE  ||
          dstFormat == AV_PIX_FMT_BGR48LE  || dstFormat == AV_PIX_FMT_BGR48BE  ||
@@ -2132,6 +2134,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP16) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP10) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP12) ||
+        IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP14) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP16) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB444) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB48)  ||

+ 6 - 0
libswscale/utils.c

@@ -204,6 +204,8 @@ static const FormatEntry format_entries[] = {
     [AV_PIX_FMT_GBRAP12BE]   = { 1, 1 },
     [AV_PIX_FMT_GBRP14LE]    = { 1, 1 },
     [AV_PIX_FMT_GBRP14BE]    = { 1, 1 },
+    [AV_PIX_FMT_GBRAP14LE]   = { 1, 1 },
+    [AV_PIX_FMT_GBRAP14BE]   = { 1, 1 },
     [AV_PIX_FMT_GBRP16LE]    = { 1, 1 },
     [AV_PIX_FMT_GBRP16BE]    = { 1, 1 },
     [AV_PIX_FMT_GBRPF32LE]   = { 1, 1 },
@@ -1228,6 +1230,9 @@ static enum AVPixelFormat alphaless_fmt(enum AVPixelFormat fmt)
     case AV_PIX_FMT_GBRAP12LE:          return AV_PIX_FMT_GBRP12;
     case AV_PIX_FMT_GBRAP12BE:          return AV_PIX_FMT_GBRP12;
 
+    case AV_PIX_FMT_GBRAP14LE:          return AV_PIX_FMT_GBRP14;
+    case AV_PIX_FMT_GBRAP14BE:          return AV_PIX_FMT_GBRP14;
+
     case AV_PIX_FMT_GBRAP16LE:          return AV_PIX_FMT_GBRP16;
     case AV_PIX_FMT_GBRAP16BE:          return AV_PIX_FMT_GBRP16;
 
@@ -1496,6 +1501,7 @@ static av_cold int sws_init_single_context(SwsContext *c, SwsFilter *srcFilter,
         srcFormat != AV_PIX_FMT_GBRAP10BE && srcFormat != AV_PIX_FMT_GBRAP10LE &&
         srcFormat != AV_PIX_FMT_GBRP12BE  && srcFormat != AV_PIX_FMT_GBRP12LE &&
         srcFormat != AV_PIX_FMT_GBRAP12BE && srcFormat != AV_PIX_FMT_GBRAP12LE &&
+        srcFormat != AV_PIX_FMT_GBRAP14BE && srcFormat != AV_PIX_FMT_GBRAP14LE &&
         srcFormat != AV_PIX_FMT_GBRP14BE  && srcFormat != AV_PIX_FMT_GBRP14LE &&
         srcFormat != AV_PIX_FMT_GBRP16BE  && srcFormat != AV_PIX_FMT_GBRP16LE &&
         srcFormat != AV_PIX_FMT_GBRAP16BE  && srcFormat != AV_PIX_FMT_GBRAP16LE &&

+ 1 - 1
libswscale/version.h

@@ -28,7 +28,7 @@
 
 #include "version_major.h"
 
-#define LIBSWSCALE_VERSION_MINOR   3
+#define LIBSWSCALE_VERSION_MINOR   4
 #define LIBSWSCALE_VERSION_MICRO 100
 
 #define LIBSWSCALE_VERSION_INT  AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \

+ 1 - 0
tests/ref/fate/filter-pixdesc-gbrap14be

@@ -0,0 +1 @@
+pixdesc-gbrap14be   31cab6d8ee655ff61cf44ea458268e4c

+ 1 - 0
tests/ref/fate/filter-pixdesc-gbrap14le

@@ -0,0 +1 @@
+pixdesc-gbrap14le   db6b141efe8f0d9cfa8f77937e577b50

+ 2 - 0
tests/ref/fate/filter-pixfmts-copy

@@ -23,6 +23,8 @@ gbrap10be           edcffb185e44b6dae5c2ead5505b7125
 gbrap10le           2a7392e14b21b1f9457526a071236a6d
 gbrap12be           0c4c1f8af361571265ca259d5f70f026
 gbrap12le           5f1d8c663d4c28863e687192433b34a4
+gbrap14be           25694ddb34dceabec5143a7677c8072d
+gbrap14le           0eba343fc6f713d310db3d67f7d5a06b
 gbrap16be           e4edca4361d643794034e5aa9ef290b1
 gbrap16le           9a95b389d2bf556179e8f4b27fb550ab
 gbrapf32be          d908f0950d3735863fe6f0793fa24f76

Some files were not shown because too many files changed in this diff