| ... | ... |
@@ -698,6 +698,18 @@ static inline void yuv2nv12XinC(const int16_t *lumFilter, const int16_t **lumSrc |
| 698 | 698 |
dest+=12;\ |
| 699 | 699 |
}\ |
| 700 | 700 |
break;\ |
| 701 |
+ case PIX_FMT_BGR48BE:\ |
|
| 702 |
+ case PIX_FMT_BGR48LE:\ |
|
| 703 |
+ func(uint8_t,0)\ |
|
| 704 |
+ ((uint8_t*)dest)[ 0] = ((uint8_t*)dest)[ 1] = b[Y1];\ |
|
| 705 |
+ ((uint8_t*)dest)[ 2] = ((uint8_t*)dest)[ 3] = g[Y1];\ |
|
| 706 |
+ ((uint8_t*)dest)[ 4] = ((uint8_t*)dest)[ 5] = r[Y1];\ |
|
| 707 |
+ ((uint8_t*)dest)[ 6] = ((uint8_t*)dest)[ 7] = b[Y2];\ |
|
| 708 |
+ ((uint8_t*)dest)[ 8] = ((uint8_t*)dest)[ 9] = g[Y2];\ |
|
| 709 |
+ ((uint8_t*)dest)[10] = ((uint8_t*)dest)[11] = r[Y2];\ |
|
| 710 |
+ dest+=12;\ |
|
| 711 |
+ }\ |
|
| 712 |
+ break;\ |
|
| 701 | 713 |
case PIX_FMT_RGBA:\ |
| 702 | 714 |
case PIX_FMT_BGRA:\ |
| 703 | 715 |
if (CONFIG_SMALL) {\
|
| ... | ... |
@@ -1035,6 +1047,49 @@ static inline void rgb48ToUV_half(uint8_t *dstU, uint8_t *dstV, |
| 1035 | 1035 |
} |
| 1036 | 1036 |
} |
| 1037 | 1037 |
|
| 1038 |
+static inline void bgr48ToY(uint8_t *dst, const uint8_t *src, long width, |
|
| 1039 |
+ uint32_t *unused) |
|
| 1040 |
+{
|
|
| 1041 |
+ int i; |
|
| 1042 |
+ for (i = 0; i < width; i++) {
|
|
| 1043 |
+ int b = src[i*6+0]; |
|
| 1044 |
+ int g = src[i*6+2]; |
|
| 1045 |
+ int r = src[i*6+4]; |
|
| 1046 |
+ |
|
| 1047 |
+ dst[i] = (RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
|
| 1048 |
+ } |
|
| 1049 |
+} |
|
| 1050 |
+ |
|
| 1051 |
+static inline void bgr48ToUV(uint8_t *dstU, uint8_t *dstV, |
|
| 1052 |
+ const uint8_t *src1, const uint8_t *src2, |
|
| 1053 |
+ long width, uint32_t *unused) |
|
| 1054 |
+{
|
|
| 1055 |
+ int i; |
|
| 1056 |
+ for (i = 0; i < width; i++) {
|
|
| 1057 |
+ int b = src1[6*i + 0]; |
|
| 1058 |
+ int g = src1[6*i + 2]; |
|
| 1059 |
+ int r = src1[6*i + 4]; |
|
| 1060 |
+ |
|
| 1061 |
+ dstU[i] = (RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
|
| 1062 |
+ dstV[i] = (RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
|
| 1063 |
+ } |
|
| 1064 |
+} |
|
| 1065 |
+ |
|
| 1066 |
+static inline void bgr48ToUV_half(uint8_t *dstU, uint8_t *dstV, |
|
| 1067 |
+ const uint8_t *src1, const uint8_t *src2, |
|
| 1068 |
+ long width, uint32_t *unused) |
|
| 1069 |
+{
|
|
| 1070 |
+ int i; |
|
| 1071 |
+ for (i = 0; i < width; i++) {
|
|
| 1072 |
+ int b= src1[12*i + 0] + src1[12*i + 6]; |
|
| 1073 |
+ int g= src1[12*i + 2] + src1[12*i + 8]; |
|
| 1074 |
+ int r= src1[12*i + 4] + src1[12*i + 10]; |
|
| 1075 |
+ |
|
| 1076 |
+ dstU[i]= (RU*r + GU*g + BU*b + (257<<RGB2YUV_SHIFT)) >> (RGB2YUV_SHIFT+1); |
|
| 1077 |
+ dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT)) >> (RGB2YUV_SHIFT+1); |
|
| 1078 |
+ } |
|
| 1079 |
+} |
|
| 1080 |
+ |
|
| 1038 | 1081 |
#define BGR2Y(type, name, shr, shg, shb, maskr, maskg, maskb, RY, GY, BY, S)\ |
| 1039 | 1082 |
static inline void name(uint8_t *dst, const uint8_t *src, long width, uint32_t *unused)\ |
| 1040 | 1083 |
{\
|
| ... | ... |
@@ -1788,6 +1843,8 @@ void ff_get_unscaled_swscale(SwsContext *c) |
| 1788 | 1788 |
&& srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE |
| 1789 | 1789 |
&& srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE |
| 1790 | 1790 |
&& srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE |
| 1791 |
+ && srcFormat != PIX_FMT_BGR48LE && dstFormat != PIX_FMT_BGR48LE |
|
| 1792 |
+ && srcFormat != PIX_FMT_BGR48BE && dstFormat != PIX_FMT_BGR48BE |
|
| 1791 | 1793 |
&& (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) |
| 1792 | 1794 |
c->swScale= rgbToRgbWrapper; |
| 1793 | 1795 |
|
| ... | ... |
@@ -30,7 +30,7 @@ |
| 30 | 30 |
#include "libavutil/avutil.h" |
| 31 | 31 |
|
| 32 | 32 |
#define LIBSWSCALE_VERSION_MAJOR 0 |
| 33 |
-#define LIBSWSCALE_VERSION_MINOR 12 |
|
| 33 |
+#define LIBSWSCALE_VERSION_MINOR 13 |
|
| 34 | 34 |
#define LIBSWSCALE_VERSION_MICRO 0 |
| 35 | 35 |
|
| 36 | 36 |
#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ |
| ... | ... |
@@ -341,6 +341,8 @@ const char *sws_format_name(enum PixelFormat format); |
| 341 | 341 |
#define is16BPS(x) ( \ |
| 342 | 342 |
(x)==PIX_FMT_GRAY16BE \ |
| 343 | 343 |
|| (x)==PIX_FMT_GRAY16LE \ |
| 344 |
+ || (x)==PIX_FMT_BGR48BE \ |
|
| 345 |
+ || (x)==PIX_FMT_BGR48LE \ |
|
| 344 | 346 |
|| (x)==PIX_FMT_RGB48BE \ |
| 345 | 347 |
|| (x)==PIX_FMT_RGB48LE \ |
| 346 | 348 |
|| (x)==PIX_FMT_YUV420P16LE \ |
| ... | ... |
@@ -405,7 +407,9 @@ const char *sws_format_name(enum PixelFormat format); |
| 405 | 405 |
|| (x)==PIX_FMT_MONOWHITE \ |
| 406 | 406 |
) |
| 407 | 407 |
#define isBGRinInt(x) ( \ |
| 408 |
- (x)==PIX_FMT_BGR32 \ |
|
| 408 |
+ (x)==PIX_FMT_BGR48BE \ |
|
| 409 |
+ || (x)==PIX_FMT_BGR48LE \ |
|
| 410 |
+ || (x)==PIX_FMT_BGR32 \ |
|
| 409 | 411 |
|| (x)==PIX_FMT_BGR32_1 \ |
| 410 | 412 |
|| (x)==PIX_FMT_BGR24 \ |
| 411 | 413 |
|| (x)==PIX_FMT_BGR565BE \ |
| ... | ... |
@@ -428,7 +432,9 @@ const char *sws_format_name(enum PixelFormat format); |
| 428 | 428 |
|| (x)==PIX_FMT_RGB24 \ |
| 429 | 429 |
) |
| 430 | 430 |
#define isBGRinBytes(x) ( \ |
| 431 |
- (x)==PIX_FMT_BGRA \ |
|
| 431 |
+ (x)==PIX_FMT_BGR48BE \ |
|
| 432 |
+ || (x)==PIX_FMT_BGR48LE \ |
|
| 433 |
+ || (x)==PIX_FMT_BGRA \ |
|
| 432 | 434 |
|| (x)==PIX_FMT_ABGR \ |
| 433 | 435 |
|| (x)==PIX_FMT_BGR24 \ |
| 434 | 436 |
) |
| ... | ... |
@@ -2966,6 +2966,8 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 2966 | 2966 |
switch(srcFormat) {
|
| 2967 | 2967 |
case PIX_FMT_RGB48BE: |
| 2968 | 2968 |
case PIX_FMT_RGB48LE: c->chrToYV12 = rgb48ToUV_half; break; |
| 2969 |
+ case PIX_FMT_BGR48BE: |
|
| 2970 |
+ case PIX_FMT_BGR48LE: c->chrToYV12 = bgr48ToUV_half; break; |
|
| 2969 | 2971 |
case PIX_FMT_RGB32 : c->chrToYV12 = bgr32ToUV_half; break; |
| 2970 | 2972 |
case PIX_FMT_RGB32_1: c->chrToYV12 = bgr321ToUV_half; break; |
| 2971 | 2973 |
case PIX_FMT_BGR24 : c->chrToYV12 = RENAME(bgr24ToUV_half); break; |
| ... | ... |
@@ -2981,6 +2983,8 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 2981 | 2981 |
switch(srcFormat) {
|
| 2982 | 2982 |
case PIX_FMT_RGB48BE: |
| 2983 | 2983 |
case PIX_FMT_RGB48LE: c->chrToYV12 = rgb48ToUV; break; |
| 2984 |
+ case PIX_FMT_BGR48BE: |
|
| 2985 |
+ case PIX_FMT_BGR48LE: c->chrToYV12 = bgr48ToUV; break; |
|
| 2984 | 2986 |
case PIX_FMT_RGB32 : c->chrToYV12 = bgr32ToUV; break; |
| 2985 | 2987 |
case PIX_FMT_RGB32_1: c->chrToYV12 = bgr321ToUV; break; |
| 2986 | 2988 |
case PIX_FMT_BGR24 : c->chrToYV12 = RENAME(bgr24ToUV); break; |
| ... | ... |
@@ -3027,6 +3031,8 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 3027 | 3027 |
case PIX_FMT_BGR32_1: c->lumToYV12 = rgb321ToY; break; |
| 3028 | 3028 |
case PIX_FMT_RGB48BE: |
| 3029 | 3029 |
case PIX_FMT_RGB48LE: c->lumToYV12 = rgb48ToY; break; |
| 3030 |
+ case PIX_FMT_BGR48BE: |
|
| 3031 |
+ case PIX_FMT_BGR48LE: c->lumToYV12 = bgr48ToY; break; |
|
| 3030 | 3032 |
} |
| 3031 | 3033 |
if (c->alpPixBuf) {
|
| 3032 | 3034 |
switch (srcFormat) {
|
| ... | ... |
@@ -3047,6 +3053,7 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 3047 | 3047 |
c->alpSrcOffset = 3; |
| 3048 | 3048 |
break; |
| 3049 | 3049 |
case PIX_FMT_RGB48LE: |
| 3050 |
+ case PIX_FMT_BGR48LE: |
|
| 3050 | 3051 |
c->lumSrcOffset = 1; |
| 3051 | 3052 |
c->chrSrcOffset = 1; |
| 3052 | 3053 |
c->alpSrcOffset = 1; |
| ... | ... |
@@ -73,6 +73,8 @@ const char *swscale_license(void) |
| 73 | 73 |
|| (x)==PIX_FMT_RGB48LE \ |
| 74 | 74 |
|| (x)==PIX_FMT_RGB32 \ |
| 75 | 75 |
|| (x)==PIX_FMT_RGB32_1 \ |
| 76 |
+ || (x)==PIX_FMT_BGR48BE \ |
|
| 77 |
+ || (x)==PIX_FMT_BGR48LE \ |
|
| 76 | 78 |
|| (x)==PIX_FMT_BGR24 \ |
| 77 | 79 |
|| (x)==PIX_FMT_BGR565 \ |
| 78 | 80 |
|| (x)==PIX_FMT_BGR555 \ |
| ... | ... |
@@ -99,6 +99,16 @@ const int *sws_getCoefficients(int colorspace) |
| 99 | 99 |
dst[12*i+ 8] = dst[12*i+ 9] = g[Y]; \ |
| 100 | 100 |
dst[12*i+10] = dst[12*i+11] = b[Y]; |
| 101 | 101 |
|
| 102 |
+#define PUTBGR48(dst,src,i) \ |
|
| 103 |
+ Y = src[2*i]; \ |
|
| 104 |
+ dst[12*i+ 0] = dst[12*i+ 1] = b[Y]; \ |
|
| 105 |
+ dst[12*i+ 2] = dst[12*i+ 3] = g[Y]; \ |
|
| 106 |
+ dst[12*i+ 4] = dst[12*i+ 5] = r[Y]; \ |
|
| 107 |
+ Y = src[2*i+1]; \ |
|
| 108 |
+ dst[12*i+ 6] = dst[12*i+ 7] = b[Y]; \ |
|
| 109 |
+ dst[12*i+ 8] = dst[12*i+ 9] = g[Y]; \ |
|
| 110 |
+ dst[12*i+10] = dst[12*i+11] = r[Y]; |
|
| 111 |
+ |
|
| 102 | 112 |
#define YUV2RGBFUNC(func_name, dst_type, alpha) \ |
| 103 | 113 |
static int func_name(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, \ |
| 104 | 114 |
int srcSliceH, uint8_t* dst[], int dstStride[]) \ |
| ... | ... |
@@ -175,6 +185,32 @@ ENDYUV2RGBLINE(48) |
| 175 | 175 |
PUTRGB48(dst_1,py_1,1); |
| 176 | 176 |
ENDYUV2RGBFUNC() |
| 177 | 177 |
|
| 178 |
+YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0) |
|
| 179 |
+ LOADCHROMA(0); |
|
| 180 |
+ PUTBGR48(dst_1,py_1,0); |
|
| 181 |
+ PUTBGR48(dst_2,py_2,0); |
|
| 182 |
+ |
|
| 183 |
+ LOADCHROMA(1); |
|
| 184 |
+ PUTBGR48(dst_2,py_2,1); |
|
| 185 |
+ PUTBGR48(dst_1,py_1,1); |
|
| 186 |
+ |
|
| 187 |
+ LOADCHROMA(2); |
|
| 188 |
+ PUTBGR48(dst_1,py_1,2); |
|
| 189 |
+ PUTBGR48(dst_2,py_2,2); |
|
| 190 |
+ |
|
| 191 |
+ LOADCHROMA(3); |
|
| 192 |
+ PUTBGR48(dst_2,py_2,3); |
|
| 193 |
+ PUTBGR48(dst_1,py_1,3); |
|
| 194 |
+ENDYUV2RGBLINE(48) |
|
| 195 |
+ LOADCHROMA(0); |
|
| 196 |
+ PUTBGR48(dst_1,py_1,0); |
|
| 197 |
+ PUTBGR48(dst_2,py_2,0); |
|
| 198 |
+ |
|
| 199 |
+ LOADCHROMA(1); |
|
| 200 |
+ PUTBGR48(dst_2,py_2,1); |
|
| 201 |
+ PUTBGR48(dst_1,py_1,1); |
|
| 202 |
+ENDYUV2RGBFUNC() |
|
| 203 |
+ |
|
| 178 | 204 |
YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0) |
| 179 | 205 |
LOADCHROMA(0); |
| 180 | 206 |
PUTRGB(dst_1,py_1,0); |
| ... | ... |
@@ -568,6 +604,8 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) |
| 568 | 568 |
av_log(c, AV_LOG_WARNING, "No accelerated colorspace conversion found from %s to %s.\n", sws_format_name(c->srcFormat), sws_format_name(c->dstFormat)); |
| 569 | 569 |
|
| 570 | 570 |
switch (c->dstFormat) {
|
| 571 |
+ case PIX_FMT_BGR48BE: |
|
| 572 |
+ case PIX_FMT_BGR48LE: return yuv2rgb_c_bgr48; |
|
| 571 | 573 |
case PIX_FMT_RGB48BE: |
| 572 | 574 |
case PIX_FMT_RGB48LE: return yuv2rgb_c_48; |
| 573 | 575 |
case PIX_FMT_ARGB: |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr 037bf9df6a765520ad6d490066bf4b89 |
| 2 | 2 |
argb c442a8261c2265a07212ef0f72e35f5a |
| 3 | 3 |
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b |
| 4 |
+bgr48be 4ba0ff7fc9e011ea264610ad1585bb1f |
|
| 5 |
+bgr48le d022bfdd6a07d5dcc693799322a386b4 |
|
| 4 | 6 |
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806 |
| 5 | 7 |
bgr555be 49f01b1f1f0c84fd9e776dd34cc3c280 |
| 6 | 8 |
bgr565be 257cf78afa35dc31e9696f139c916715 |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr 037bf9df6a765520ad6d490066bf4b89 |
| 2 | 2 |
argb c442a8261c2265a07212ef0f72e35f5a |
| 3 | 3 |
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b |
| 4 |
+bgr48be 4ba0ff7fc9e011ea264610ad1585bb1f |
|
| 5 |
+bgr48le d022bfdd6a07d5dcc693799322a386b4 |
|
| 4 | 6 |
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806 |
| 5 | 7 |
bgr555le 378d6ac4223651a1adcbf94a3d0d807b |
| 6 | 8 |
bgr565le 1dfdd03995c287e3c754b164bf26a355 |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr 037bf9df6a765520ad6d490066bf4b89 |
| 2 | 2 |
argb c442a8261c2265a07212ef0f72e35f5a |
| 3 | 3 |
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b |
| 4 |
+bgr48be 4ba0ff7fc9e011ea264610ad1585bb1f |
|
| 5 |
+bgr48le d022bfdd6a07d5dcc693799322a386b4 |
|
| 4 | 6 |
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806 |
| 5 | 7 |
bgr555le 378d6ac4223651a1adcbf94a3d0d807b |
| 6 | 8 |
bgr565le 1dfdd03995c287e3c754b164bf26a355 |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr 037bf9df6a765520ad6d490066bf4b89 |
| 2 | 2 |
argb c442a8261c2265a07212ef0f72e35f5a |
| 3 | 3 |
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b |
| 4 |
+bgr48be 4ba0ff7fc9e011ea264610ad1585bb1f |
|
| 5 |
+bgr48le d022bfdd6a07d5dcc693799322a386b4 |
|
| 4 | 6 |
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806 |
| 5 | 7 |
bgr555le 378d6ac4223651a1adcbf94a3d0d807b |
| 6 | 8 |
bgr565le 1dfdd03995c287e3c754b164bf26a355 |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr d894cb97f6c80eb21bdbe8a4eea62d86 |
| 2 | 2 |
argb 54346f2b2eef10919e0f247241df3b24 |
| 3 | 3 |
bgr24 570f8d6b51a838aed022ef67535f6bdc |
| 4 |
+bgr48be fcc0f2dbf45d325f84f816c74cbeeebe |
|
| 5 |
+bgr48le 3f9c2b23eed3b8d196d1c14b38ce50f5 |
|
| 4 | 6 |
bgr4_byte ee1d35a7baf8e9016891929a2f565c0b |
| 5 | 7 |
bgr555le 36b745067197f9ca8c1731cac51329c9 |
| 6 | 8 |
bgr565le 3a514a298c6161a071ddf9963c06509d |
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
abgr 25e72e9dbd01ab00727c976d577f7be5 |
| 2 | 2 |
argb 19869bf1a5ac0b6af4d8bbe2c104533c |
| 3 | 3 |
bgr24 89108a4ba00201f79b75b9305c42352d |
| 4 |
+bgr48be ed82382da09b64a8e04728fcf76e6814 |
|
| 5 |
+bgr48le 0f1f135608c2ff24d26d03e939fc2112 |
|
| 4 | 6 |
bgr4_byte 407fcf564ed764c38e1d748f700ab921 |
| 5 | 7 |
bgr555le bd7b3ec4d684dfad075d89a606cb8b74 |
| 6 | 8 |
bgr565le fdb617533e1e7ff512ea5b6b6233e738 |