From 47cfa9e755e1917dcedd42be20c2c6f71e53c57d Mon Sep 17 00:00:00 2001 From: lucabe Date: Wed, 27 Sep 2006 11:41:36 +0000 Subject: Add support for YUVJ formats git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19993 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libswscale/swscale.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'libswscale/swscale.c') diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 8dd0d4fe77..1b649f33d4 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -1841,6 +1841,23 @@ int sws_getColorspaceDetails(SwsContext *c, int **inv_table, int *srcRange, int return 0; } +static int handle_jpeg(int *format) +{ + switch (*format) { + case PIX_FMT_YUVJ420P: + *format = PIX_FMT_YUV420P; + return 1; + case PIX_FMT_YUVJ422P: + *format = PIX_FMT_YUV422P; + return 1; + case PIX_FMT_YUVJ444P: + *format = PIX_FMT_YUV444P; + return 1; + default: + return 0; + } +} + SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, double *param){ @@ -1848,6 +1865,7 @@ SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH int i; int usesVFilter, usesHFilter; int unscaled, needsDither; + int srcRange, dstRange; SwsFilter dummyFilter= {NULL, NULL, NULL, NULL}; #if defined(ARCH_X86) || defined(ARCH_X86_64) if(flags & SWS_CPU_CAPS_MMX) @@ -1874,6 +1892,9 @@ SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH && (fmt_depth(dstFormat))<24 && ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat)))); + srcRange = handle_jpeg(&srcFormat); + dstRange = handle_jpeg(&dstFormat); + if(!isSupportedIn(srcFormat)) { MSG_ERR("swScaler: %s is not supported as input format\n", sws_format_name(srcFormat)); @@ -1951,7 +1972,7 @@ SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH c->chrDstW= -((-dstW) >> c->chrDstHSubSample); c->chrDstH= -((-dstH) >> c->chrDstVSubSample); - sws_setColorspaceDetails(c, Inverse_Table_6_9[SWS_CS_DEFAULT], 0, Inverse_Table_6_9[SWS_CS_DEFAULT] /* FIXME*/, 0, 0, 1<<16, 1<<16); + sws_setColorspaceDetails(c, Inverse_Table_6_9[SWS_CS_DEFAULT], srcRange, Inverse_Table_6_9[SWS_CS_DEFAULT] /* FIXME*/, dstRange, 0, 1<<16, 1<<16); /* unscaled special Cases */ if(unscaled && !usesHFilter && !usesVFilter) -- cgit v1.2.3