---
libswscale/swscale_unscaled.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index 86bc5ac..8de4f75 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -252,6 +252,25 @@ static void gray8aToPacked24(const uint8_t *src, uint8_t
*dst, int num_pixels, c
}
}
+static int rgb48_bswap(SwsContext *c, const uint8_t* src[], int srcStride[],
+ int srcSliceY, int srcSliceH,
+ uint8_t* dst[], int dstStride[])
+{
+ int i, j;
+ uint16_t *dstPtr = (uint16_t *)dst[0];
+ const uint16_t *srcPtr = (const uint16_t *)src[0];
+
+ for (i = 0; i < srcSliceH; i++) {
+ for (j = 0; j < srcStride[0]>>1; j++) {
+ dstPtr[j] = av_bswap16(srcPtr[j]);
+ }
+ srcPtr += srcStride[0]>>1;
+ dstPtr += dstStride[0]>>1;
+ }
+
+ return srcSliceH;
+}
+
static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int
srcStride[], int srcSliceY,
int srcSliceH, uint8_t* dst[], int dstStride[])
{
@@ -697,6 +716,13 @@ void ff_get_unscaled_swscale(SwsContext *c)
if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P ||
dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND))
c->swScale= bgr24ToYv12Wrapper;
+ /* bswap 16 bits per component RGB formats */
+ if ((srcFormat == PIX_FMT_RGB48LE && dstFormat == PIX_FMT_RGB48BE) ||
+ (srcFormat == PIX_FMT_RGB48BE && dstFormat == PIX_FMT_RGB48LE) ||
+ (srcFormat == PIX_FMT_BGR48LE && dstFormat == PIX_FMT_BGR48BE) ||
+ (srcFormat == PIX_FMT_BGR48BE && dstFormat == PIX_FMT_BGR48LE))
+ c->swScale = rgb48_bswap;
+
/* RGB/BGR -> RGB/BGR (no dither needed forms) */
if ( isAnyRGB(srcFormat)
&& isAnyRGB(dstFormat)
--
1.7.8
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel