Commit 2060d944 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'c1eb3e7f'

* commit 'c1eb3e7f':
  swscale: add support for endianness only conversion

Conflicts:
	libswscale/utils.c
	libswscale/version.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 60fd8805 c1eb3e7f
...@@ -146,6 +146,13 @@ int sws_isSupportedInput(enum AVPixelFormat pix_fmt); ...@@ -146,6 +146,13 @@ int sws_isSupportedInput(enum AVPixelFormat pix_fmt);
*/ */
int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); int sws_isSupportedOutput(enum AVPixelFormat pix_fmt);
/**
* @param[in] pix_fmt the pixel format
* @return a positive value if an endianness conversion for pix_fmt is
* supported, 0 otherwise.
*/
int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt);
/** /**
* Allocate an empty SwsContext. This must be filled and passed to * Allocate an empty SwsContext. This must be filled and passed to
* sws_init_context(). For filling see AVOptions, options.c and * sws_init_context(). For filling see AVOptions, options.c and
......
...@@ -72,7 +72,9 @@ const char *swscale_license(void) ...@@ -72,7 +72,9 @@ const char *swscale_license(void)
#define RET 0xC3 // near return opcode for x86 #define RET 0xC3 // near return opcode for x86
typedef struct FormatEntry { typedef struct FormatEntry {
int is_supported_in, is_supported_out; uint8_t is_supported_in :1;
uint8_t is_supported_out :1;
uint8_t is_supported_endianness :1;
} FormatEntry; } FormatEntry;
static const FormatEntry format_entries[AV_PIX_FMT_NB] = { static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
...@@ -215,6 +217,12 @@ int sws_isSupportedOutput(enum AVPixelFormat pix_fmt) ...@@ -215,6 +217,12 @@ int sws_isSupportedOutput(enum AVPixelFormat pix_fmt)
format_entries[pix_fmt].is_supported_out : 0; format_entries[pix_fmt].is_supported_out : 0;
} }
int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt)
{
return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
format_entries[pix_fmt].is_supported_endianness : 0;
}
extern const int32_t ff_yuv2rgb_coeffs[8][4]; extern const int32_t ff_yuv2rgb_coeffs[8][4];
#if FF_API_SWS_FORMAT_NAME #if FF_API_SWS_FORMAT_NAME
...@@ -1077,6 +1085,8 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, ...@@ -1077,6 +1085,8 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
c->dstFormat= dstFormat; c->dstFormat= dstFormat;
} }
if (!(unscaled && sws_isSupportedEndiannessConversion(srcFormat) &&
av_pix_fmt_swap_endianness(srcFormat) == dstFormat)) {
if (!sws_isSupportedInput(srcFormat)) { if (!sws_isSupportedInput(srcFormat)) {
av_log(c, AV_LOG_ERROR, "%s is not supported as input pixel format\n", av_log(c, AV_LOG_ERROR, "%s is not supported as input pixel format\n",
av_get_pix_fmt_name(srcFormat)); av_get_pix_fmt_name(srcFormat));
...@@ -1087,6 +1097,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, ...@@ -1087,6 +1097,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
av_get_pix_fmt_name(dstFormat)); av_get_pix_fmt_name(dstFormat));
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
}
i = flags & (SWS_POINT | i = flags & (SWS_POINT |
SWS_AREA | SWS_AREA |
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBSWSCALE_VERSION_MAJOR 2 #define LIBSWSCALE_VERSION_MAJOR 2
#define LIBSWSCALE_VERSION_MINOR 2 #define LIBSWSCALE_VERSION_MINOR 3
#define LIBSWSCALE_VERSION_MICRO 100 #define LIBSWSCALE_VERSION_MICRO 100
#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment