mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 04:26:37 +08:00 
			
		
		
		
	Merge remote-tracking branch 'qatar/master'
* qatar/master: build: link test programs with static libraries dct-test: remove unused variable cropTbl swscale: fix overflow in gray16 vertical scaling. get_bits: remove LAST_SKIP_CACHE macro swscale: fix integer overflows in RGB pixel writing. swscale: add endian conversion for RGB555 and RGB444 pixel formats swscale: fix overflows in output of RGB48 pixels. get_bits: remove strange/obsolete comments get_bits: whitespace (mostly) cosmetics swscale: add rgb565 endianess conversion get_bits: remove unnecessary #includes mp3dec: hack: fix decoding with safe bitstream reader fate: fix eatqi test adpcm: Check for channels to be a non-zero integer swscale: fix overflows in RGB rounding constants. get_bits: introduce safe bitreading to prevent overreads. Conflicts: libswscale/swscale.c libswscale/swscale_unscaled.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										5
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -116,6 +116,9 @@ Configuration options: | |||||||
|   --disable-vda            disable VDA code |   --disable-vda            disable VDA code | ||||||
|   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) |   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) | ||||||
|   --enable-hardcoded-tables use hardcoded tables instead of runtime generation |   --enable-hardcoded-tables use hardcoded tables instead of runtime generation | ||||||
|  |   --disable-safe-bitstream-reader | ||||||
|  |                            disable buffer boundary checking in bitreaders | ||||||
|  |                            (faster, but may crash) | ||||||
|   --enable-memalign-hack   emulate memalign, interferes with memory debuggers |   --enable-memalign-hack   emulate memalign, interferes with memory debuggers | ||||||
|   --disable-everything     disable all components listed below |   --disable-everything     disable all components listed below | ||||||
|   --disable-encoder=NAME   disable encoder NAME |   --disable-encoder=NAME   disable encoder NAME | ||||||
| @@ -1060,6 +1063,7 @@ CONFIG_LIST=" | |||||||
|     rdft |     rdft | ||||||
|     rtpdec |     rtpdec | ||||||
|     runtime_cpudetect |     runtime_cpudetect | ||||||
|  |     safe_bitstream_reader | ||||||
|     shared |     shared | ||||||
|     sinewin |     sinewin | ||||||
|     small |     small | ||||||
| @@ -1812,6 +1816,7 @@ enable doc | |||||||
| enable fastdiv | enable fastdiv | ||||||
| enable network | enable network | ||||||
| enable optimizations | enable optimizations | ||||||
|  | enable safe_bitstream_reader | ||||||
| enable static | enable static | ||||||
| enable swscale_alpha | enable swscale_alpha | ||||||
|  |  | ||||||
|   | |||||||
| @@ -101,8 +101,9 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) | |||||||
|         max_channels = 6; |         max_channels = 6; | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     if(avctx->channels > max_channels){ |     if (avctx->channels <= 0 || avctx->channels > max_channels) { | ||||||
|         return -1; |         av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n"); | ||||||
|  |         return AVERROR(EINVAL); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     switch(avctx->codec->id) { |     switch(avctx->codec->id) { | ||||||
|   | |||||||
| @@ -170,8 +170,6 @@ static const struct algo idct_tab[] = { | |||||||
|  |  | ||||||
| #define AANSCALE_BITS 12 | #define AANSCALE_BITS 12 | ||||||
|  |  | ||||||
| static uint8_t cropTbl[256 + 2 * MAX_NEG_CROP]; |  | ||||||
|  |  | ||||||
| static int64_t gettime(void) | static int64_t gettime(void) | ||||||
| { | { | ||||||
|     struct timeval tv; |     struct timeval tv; | ||||||
| @@ -557,13 +555,6 @@ int main(int argc, char **argv) | |||||||
|     ff_ref_dct_init(); |     ff_ref_dct_init(); | ||||||
|     idct_mmx_init(); |     idct_mmx_init(); | ||||||
|  |  | ||||||
|     for (i = 0; i < 256; i++) |  | ||||||
|         cropTbl[i + MAX_NEG_CROP] = i; |  | ||||||
|     for (i = 0; i < MAX_NEG_CROP; i++) { |  | ||||||
|         cropTbl[i] = 0; |  | ||||||
|         cropTbl[i + MAX_NEG_CROP + 256] = 255; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         c = getopt(argc, argv, "ih4t"); |         c = getopt(argc, argv, "ih4t"); | ||||||
|         if (c == -1) |         if (c == -1) | ||||||
|   | |||||||
| @@ -27,20 +27,33 @@ | |||||||
| #define AVCODEC_GET_BITS_H | #define AVCODEC_GET_BITS_H | ||||||
|  |  | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdlib.h> |  | ||||||
| #include <assert.h> |  | ||||||
| #include "libavutil/bswap.h" |  | ||||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||||
| #include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||||
| #include "libavutil/log.h" | #include "libavutil/log.h" | ||||||
| #include "mathops.h" | #include "mathops.h" | ||||||
|  |  | ||||||
| /* bit input */ | /* | ||||||
| /* buffer, buffer_end and size_in_bits must be present and used by every reader */ |  * Safe bitstream reading: | ||||||
|  |  * optionally, the get_bits API can check to ensure that we | ||||||
|  |  * don't read past input buffer boundaries. This is protected | ||||||
|  |  * with CONFIG_SAFE_BITSTREAM_READER at the global level, and | ||||||
|  |  * then below that with UNCHECKED_BITSTREAM_READER at the per- | ||||||
|  |  * decoder level. This means that decoders that check internally | ||||||
|  |  * can "#define UNCHECKED_BITSTREAM_READER 1" to disable | ||||||
|  |  * overread checks. | ||||||
|  |  * Boundary checking causes a minor performance penalty so for | ||||||
|  |  * applications that won't want/need this, it can be disabled | ||||||
|  |  * globally using "#define CONFIG_SAFE_BITSTREAM_READER 0". | ||||||
|  |  */ | ||||||
|  | #ifndef UNCHECKED_BITSTREAM_READER | ||||||
|  | #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER | ||||||
|  | #endif | ||||||
|  |  | ||||||
| typedef struct GetBitContext { | typedef struct GetBitContext { | ||||||
|     const uint8_t *buffer, *buffer_end; |     const uint8_t *buffer, *buffer_end; | ||||||
|     int index; |     int index; | ||||||
|     int size_in_bits; |     int size_in_bits; | ||||||
|  |     int size_in_bits_plus8; | ||||||
| } GetBitContext; | } GetBitContext; | ||||||
|  |  | ||||||
| #define VLC_TYPE int16_t | #define VLC_TYPE int16_t | ||||||
| @@ -93,11 +106,8 @@ SKIP_CACHE(name, gb, num) | |||||||
| SKIP_COUNTER(name, gb, num) | SKIP_COUNTER(name, gb, num) | ||||||
|     will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS) |     will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS) | ||||||
|  |  | ||||||
| LAST_SKIP_CACHE(name, gb, num) |  | ||||||
|     will remove the next num bits from the cache if it is needed for UPDATE_CACHE otherwise it will do nothing |  | ||||||
|  |  | ||||||
| LAST_SKIP_BITS(name, gb, num) | LAST_SKIP_BITS(name, gb, num) | ||||||
|     is equivalent to LAST_SKIP_CACHE; SKIP_COUNTER |     like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER | ||||||
|  |  | ||||||
| for examples see get_bits, show_bits, skip_bits, get_vlc | for examples see get_bits, show_bits, skip_bits, get_vlc | ||||||
| */ | */ | ||||||
| @@ -115,29 +125,37 @@ for examples see get_bits, show_bits, skip_bits, get_vlc | |||||||
| #define CLOSE_READER(name, gb) (gb)->index = name##_index | #define CLOSE_READER(name, gb) (gb)->index = name##_index | ||||||
|  |  | ||||||
| #ifdef ALT_BITSTREAM_READER_LE | #ifdef ALT_BITSTREAM_READER_LE | ||||||
|  |  | ||||||
| # ifdef LONG_BITSTREAM_READER | # ifdef LONG_BITSTREAM_READER | ||||||
| #   define UPDATE_CACHE(name, gb) \ | #   define UPDATE_CACHE(name, gb) name##_cache = \ | ||||||
|     name##_cache = AV_RL64((gb)->buffer+(name##_index>>3)) >> (name##_index&0x07) |         AV_RL64((gb)->buffer + (name##_index >> 3)) >> (name##_index & 7) | ||||||
| # else | # else | ||||||
| #   define UPDATE_CACHE(name, gb) \ | #   define UPDATE_CACHE(name, gb) name##_cache = \ | ||||||
|     name##_cache = AV_RL32((gb)->buffer+(name##_index>>3)) >> (name##_index&0x07) |         AV_RL32((gb)->buffer + (name##_index >> 3)) >> (name##_index & 7) | ||||||
| # endif | # endif | ||||||
|  |  | ||||||
| # define SKIP_CACHE(name, gb, num) name##_cache >>= (num) | # define SKIP_CACHE(name, gb, num) name##_cache >>= (num) | ||||||
|  |  | ||||||
| #else | #else | ||||||
|  |  | ||||||
| # ifdef LONG_BITSTREAM_READER | # ifdef LONG_BITSTREAM_READER | ||||||
| #   define UPDATE_CACHE(name, gb) \ | #   define UPDATE_CACHE(name, gb) name##_cache = \ | ||||||
|     name##_cache = AV_RB64((gb)->buffer+(name##_index >> 3)) >> (32 - (name##_index & 0x07)) |         AV_RB64((gb)->buffer + (name##_index >> 3)) >> (32 - (name##_index & 7)) | ||||||
| # else | # else | ||||||
| #   define UPDATE_CACHE(name, gb) \ | #   define UPDATE_CACHE(name, gb) name##_cache = \ | ||||||
|     name##_cache = AV_RB32((gb)->buffer+(name##_index>>3)) << (name##_index&0x07) |         AV_RB32((gb)->buffer + (name##_index >> 3)) << (name##_index & 7) | ||||||
| # endif | # endif | ||||||
|  |  | ||||||
| # define SKIP_CACHE(name, gb, num) name##_cache <<= (num) | # define SKIP_CACHE(name, gb, num) name##_cache <<= (num) | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // FIXME name? | #if UNCHECKED_BITSTREAM_READER | ||||||
| #   define SKIP_COUNTER(name, gb, num) name##_index += (num) | #   define SKIP_COUNTER(name, gb, num) name##_index += (num) | ||||||
|  | #else | ||||||
|  | #   define SKIP_COUNTER(name, gb, num) \ | ||||||
|  |     name##_index = FFMIN((gb)->size_in_bits_plus8, name##_index + (num)) | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #define SKIP_BITS(name, gb, num) do {           \ | #define SKIP_BITS(name, gb, num) do {           \ | ||||||
|         SKIP_CACHE(name, gb, num);              \ |         SKIP_CACHE(name, gb, num);              \ | ||||||
| @@ -145,35 +163,37 @@ for examples see get_bits, show_bits, skip_bits, get_vlc | |||||||
|     } while (0) |     } while (0) | ||||||
|  |  | ||||||
| #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) | #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) | ||||||
| #   define LAST_SKIP_CACHE(name, gb, num) |  | ||||||
|  |  | ||||||
| #ifdef ALT_BITSTREAM_READER_LE | #ifdef ALT_BITSTREAM_READER_LE | ||||||
| #   define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num) | #   define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num) | ||||||
|  |  | ||||||
| #   define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num) | #   define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num) | ||||||
| #else | #else | ||||||
| #   define SHOW_UBITS(name, gb, num) NEG_USR32(name##_cache, num) | #   define SHOW_UBITS(name, gb, num) NEG_USR32(name##_cache, num) | ||||||
|  |  | ||||||
| #   define SHOW_SBITS(name, gb, num) NEG_SSR32(name##_cache, num) | #   define SHOW_SBITS(name, gb, num) NEG_SSR32(name##_cache, num) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #define GET_CACHE(name, gb) ((uint32_t)name##_cache) | #define GET_CACHE(name, gb) ((uint32_t)name##_cache) | ||||||
|  |  | ||||||
| static inline int get_bits_count(const GetBitContext *s){ | static inline int get_bits_count(const GetBitContext *s) | ||||||
|  | { | ||||||
|     return s->index; |     return s->index; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline void skip_bits_long(GetBitContext *s, int n){ | static inline void skip_bits_long(GetBitContext *s, int n){ | ||||||
|  | #if UNCHECKED_BITSTREAM_READER | ||||||
|     s->index += n; |     s->index += n; | ||||||
|  | #else | ||||||
|  |     s->index += av_clip(n, -s->index, s->size_in_bits_plus8 - s->index); | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * read mpeg1 dc style vlc (sign bit + mantisse with no MSB). |  * read mpeg1 dc style vlc (sign bit + mantisse with no MSB). | ||||||
|  * if MSB not set it is negative |  * if MSB not set it is negative | ||||||
|  * @param n length in bits |  * @param n length in bits | ||||||
|  * @author BERO |  | ||||||
|  */ |  */ | ||||||
| static inline int get_xbits(GetBitContext *s, int n){ | static inline int get_xbits(GetBitContext *s, int n) | ||||||
|  | { | ||||||
|     register int sign; |     register int sign; | ||||||
|     register int32_t cache; |     register int32_t cache; | ||||||
|     OPEN_READER(re, s); |     OPEN_READER(re, s); | ||||||
| @@ -185,7 +205,8 @@ static inline int get_xbits(GetBitContext *s, int n){ | |||||||
|     return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; |     return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline int get_sbits(GetBitContext *s, int n){ | static inline int get_sbits(GetBitContext *s, int n) | ||||||
|  | { | ||||||
|     register int tmp; |     register int tmp; | ||||||
|     OPEN_READER(re, s); |     OPEN_READER(re, s); | ||||||
|     UPDATE_CACHE(re, s); |     UPDATE_CACHE(re, s); | ||||||
| @@ -198,7 +219,8 @@ static inline int get_sbits(GetBitContext *s, int n){ | |||||||
| /** | /** | ||||||
|  * Read 1-25 bits. |  * Read 1-25 bits. | ||||||
|  */ |  */ | ||||||
| static inline unsigned int get_bits(GetBitContext *s, int n){ | static inline unsigned int get_bits(GetBitContext *s, int n) | ||||||
|  | { | ||||||
|     register int tmp; |     register int tmp; | ||||||
|     OPEN_READER(re, s); |     OPEN_READER(re, s); | ||||||
|     UPDATE_CACHE(re, s); |     UPDATE_CACHE(re, s); | ||||||
| @@ -211,7 +233,8 @@ static inline unsigned int get_bits(GetBitContext *s, int n){ | |||||||
| /** | /** | ||||||
|  * Show 1-25 bits. |  * Show 1-25 bits. | ||||||
|  */ |  */ | ||||||
| static inline unsigned int show_bits(GetBitContext *s, int n){ | static inline unsigned int show_bits(GetBitContext *s, int n) | ||||||
|  | { | ||||||
|     register int tmp; |     register int tmp; | ||||||
|     OPEN_READER(re, s); |     OPEN_READER(re, s); | ||||||
|     UPDATE_CACHE(re, s); |     UPDATE_CACHE(re, s); | ||||||
| @@ -219,15 +242,16 @@ static inline unsigned int show_bits(GetBitContext *s, int n){ | |||||||
|     return tmp; |     return tmp; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline void skip_bits(GetBitContext *s, int n){ | static inline void skip_bits(GetBitContext *s, int n) | ||||||
|  //Note gcc seems to optimize this to s->index+=n for the ALT_READER :)) | { | ||||||
|     OPEN_READER(re, s); |     OPEN_READER(re, s); | ||||||
|     UPDATE_CACHE(re, s); |     UPDATE_CACHE(re, s); | ||||||
|     LAST_SKIP_BITS(re, s, n); |     LAST_SKIP_BITS(re, s, n); | ||||||
|     CLOSE_READER(re, s); |     CLOSE_READER(re, s); | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline unsigned int get_bits1(GetBitContext *s){ | static inline unsigned int get_bits1(GetBitContext *s) | ||||||
|  | { | ||||||
|     unsigned int index = s->index; |     unsigned int index = s->index; | ||||||
|     uint8_t result = s->buffer[index>>3]; |     uint8_t result = s->buffer[index>>3]; | ||||||
| #ifdef ALT_BITSTREAM_READER_LE | #ifdef ALT_BITSTREAM_READER_LE | ||||||
| @@ -236,6 +260,9 @@ static inline unsigned int get_bits1(GetBitContext *s){ | |||||||
| #else | #else | ||||||
|     result <<= index & 7; |     result <<= index & 7; | ||||||
|     result >>= 8 - 1; |     result >>= 8 - 1; | ||||||
|  | #endif | ||||||
|  | #if !UNCHECKED_BITSTREAM_READER | ||||||
|  |     if (s->index < s->size_in_bits_plus8) | ||||||
| #endif | #endif | ||||||
|         index++; |         index++; | ||||||
|     s->index = index; |     s->index = index; | ||||||
| @@ -243,19 +270,23 @@ static inline unsigned int get_bits1(GetBitContext *s){ | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline unsigned int show_bits1(GetBitContext *s){ | static inline unsigned int show_bits1(GetBitContext *s) | ||||||
|  | { | ||||||
|     return show_bits(s, 1); |     return show_bits(s, 1); | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline void skip_bits1(GetBitContext *s){ | static inline void skip_bits1(GetBitContext *s) | ||||||
|  | { | ||||||
|     skip_bits(s, 1); |     skip_bits(s, 1); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Read 0-32 bits. |  * Read 0-32 bits. | ||||||
|  */ |  */ | ||||||
| static inline unsigned int get_bits_long(GetBitContext *s, int n){ | static inline unsigned int get_bits_long(GetBitContext *s, int n) | ||||||
|     if (n <= MIN_CACHE_BITS) return get_bits(s, n); | { | ||||||
|  |     if (n <= MIN_CACHE_BITS) | ||||||
|  |         return get_bits(s, n); | ||||||
|     else { |     else { | ||||||
| #ifdef ALT_BITSTREAM_READER_LE | #ifdef ALT_BITSTREAM_READER_LE | ||||||
|         int ret = get_bits(s, 16); |         int ret = get_bits(s, 16); | ||||||
| @@ -270,15 +301,18 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n){ | |||||||
| /** | /** | ||||||
|  * Read 0-32 bits as a signed integer. |  * Read 0-32 bits as a signed integer. | ||||||
|  */ |  */ | ||||||
| static inline int get_sbits_long(GetBitContext *s, int n) { | static inline int get_sbits_long(GetBitContext *s, int n) | ||||||
|  | { | ||||||
|     return sign_extend(get_bits_long(s, n), n); |     return sign_extend(get_bits_long(s, n), n); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Show 0-32 bits. |  * Show 0-32 bits. | ||||||
|  */ |  */ | ||||||
| static inline unsigned int show_bits_long(GetBitContext *s, int n){ | static inline unsigned int show_bits_long(GetBitContext *s, int n) | ||||||
|     if (n <= MIN_CACHE_BITS) return show_bits(s, n); | { | ||||||
|  |     if (n <= MIN_CACHE_BITS) | ||||||
|  |         return show_bits(s, n); | ||||||
|     else { |     else { | ||||||
|         GetBitContext gb = *s; |         GetBitContext gb = *s; | ||||||
|         return get_bits_long(&gb, n); |         return get_bits_long(&gb, n); | ||||||
| @@ -299,12 +333,9 @@ static inline int check_marker(GetBitContext *s, const char *msg) | |||||||
|  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes larger than the actual read bits |  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes larger than the actual read bits | ||||||
|  * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end |  * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end | ||||||
|  * @param bit_size the size of the buffer in bits |  * @param bit_size the size of the buffer in bits | ||||||
|  * |  | ||||||
|  * While GetBitContext stores the buffer size, for performance reasons you are |  | ||||||
|  * responsible for checking for the buffer end yourself (take advantage of the padding)! |  | ||||||
|  */ |  */ | ||||||
| static inline void init_get_bits(GetBitContext *s, | static inline void init_get_bits(GetBitContext *s, const uint8_t *buffer, | ||||||
|                    const uint8_t *buffer, int bit_size) |                                  int bit_size) | ||||||
| { | { | ||||||
|     int buffer_size = (bit_size+7)>>3; |     int buffer_size = (bit_size+7)>>3; | ||||||
|     if (buffer_size < 0 || bit_size < 0) { |     if (buffer_size < 0 || bit_size < 0) { | ||||||
| @@ -314,6 +345,7 @@ static inline void init_get_bits(GetBitContext *s, | |||||||
|  |  | ||||||
|     s->buffer       = buffer; |     s->buffer       = buffer; | ||||||
|     s->size_in_bits = bit_size; |     s->size_in_bits = bit_size; | ||||||
|  |     s->size_in_bits_plus8 = bit_size + 8; | ||||||
|     s->buffer_end   = buffer + buffer_size; |     s->buffer_end   = buffer + buffer_size; | ||||||
|     s->index        = 0; |     s->index        = 0; | ||||||
| } | } | ||||||
| @@ -355,7 +387,8 @@ void free_vlc(VLC *vlc); | |||||||
|  * If the vlc code is invalid and max_depth>1, then the number of bits removed |  * If the vlc code is invalid and max_depth>1, then the number of bits removed | ||||||
|  * is undefined. |  * is undefined. | ||||||
|  */ |  */ | ||||||
| #define GET_VLC(code, name, gb, table, bits, max_depth) do {    \ | #define GET_VLC(code, name, gb, table, bits, max_depth)         \ | ||||||
|  |     do {                                                        \ | ||||||
|         int n, nb_bits;                                         \ |         int n, nb_bits;                                         \ | ||||||
|         unsigned int index;                                     \ |         unsigned int index;                                     \ | ||||||
|                                                                 \ |                                                                 \ | ||||||
| @@ -386,7 +419,8 @@ void free_vlc(VLC *vlc); | |||||||
|         SKIP_BITS(name, gb, n);                                 \ |         SKIP_BITS(name, gb, n);                                 \ | ||||||
|     } while (0) |     } while (0) | ||||||
|  |  | ||||||
| #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update) do { \ | #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update) \ | ||||||
|  |     do {                                                                \ | ||||||
|         int n, nb_bits;                                                 \ |         int n, nb_bits;                                                 \ | ||||||
|         unsigned int index;                                             \ |         unsigned int index;                                             \ | ||||||
|                                                                         \ |                                                                         \ | ||||||
| @@ -412,7 +446,7 @@ void free_vlc(VLC *vlc); | |||||||
|  |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Parse a vlc code, faster than get_vlc(). |  * Parse a vlc code. | ||||||
|  * @param bits is the number of bits which will be read at once, must be |  * @param bits is the number of bits which will be read at once, must be | ||||||
|  *             identical to nb_bits in init_vlc() |  *             identical to nb_bits in init_vlc() | ||||||
|  * @param max_depth is the number of times bits bits must be read to completely |  * @param max_depth is the number of times bits bits must be read to completely | ||||||
| @@ -433,7 +467,8 @@ static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], | |||||||
|     return code; |     return code; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline int decode012(GetBitContext *gb){ | static inline int decode012(GetBitContext *gb) | ||||||
|  | { | ||||||
|     int n; |     int n; | ||||||
|     n = get_bits1(gb); |     n = get_bits1(gb); | ||||||
|     if (n == 0) |     if (n == 0) | ||||||
| @@ -442,7 +477,8 @@ static inline int decode012(GetBitContext *gb){ | |||||||
|         return get_bits1(gb) + 1; |         return get_bits1(gb) + 1; | ||||||
| } | } | ||||||
|  |  | ||||||
| static inline int decode210(GetBitContext *gb){ | static inline int decode210(GetBitContext *gb) | ||||||
|  | { | ||||||
|     if (get_bits1(gb)) |     if (get_bits1(gb)) | ||||||
|         return 0; |         return 0; | ||||||
|     else |     else | ||||||
| @@ -457,7 +493,8 @@ static inline int get_bits_left(GetBitContext *gb) | |||||||
| //#define TRACE | //#define TRACE | ||||||
|  |  | ||||||
| #ifdef TRACE | #ifdef TRACE | ||||||
| static inline void print_bin(int bits, int n){ | static inline void print_bin(int bits, int n) | ||||||
|  | { | ||||||
|     int i; |     int i; | ||||||
|  |  | ||||||
|     for (i = n-1; i >= 0; i--) { |     for (i = n-1; i >= 0; i--) { | ||||||
| @@ -468,7 +505,8 @@ static inline void print_bin(int bits, int n){ | |||||||
| } | } | ||||||
|  |  | ||||||
| static inline int get_bits_trace(GetBitContext *s, int n, char *file, | static inline int get_bits_trace(GetBitContext *s, int n, char *file, | ||||||
|                                  const char *func, int line){ |                                  const char *func, int line) | ||||||
|  | { | ||||||
|     int r = get_bits(s, n); |     int r = get_bits(s, n); | ||||||
|  |  | ||||||
|     print_bin(r, n); |     print_bin(r, n); | ||||||
| @@ -478,7 +516,8 @@ static inline int get_bits_trace(GetBitContext *s, int n, char *file, | |||||||
| } | } | ||||||
| static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], | static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], | ||||||
|                                 int bits, int max_depth, char *file, |                                 int bits, int max_depth, char *file, | ||||||
|                                 const char *func, int line){ |                                 const char *func, int line) | ||||||
|  | { | ||||||
|     int show  = show_bits(s, 24); |     int show  = show_bits(s, 24); | ||||||
|     int pos   = get_bits_count(s); |     int pos   = get_bits_count(s); | ||||||
|     int r     = get_vlc2(s, table, bits, max_depth); |     int r     = get_vlc2(s, table, bits, max_depth); | ||||||
| @@ -492,7 +531,8 @@ static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], | |||||||
|     return r; |     return r; | ||||||
| } | } | ||||||
| static inline int get_xbits_trace(GetBitContext *s, int n, char *file, | static inline int get_xbits_trace(GetBitContext *s, int n, char *file, | ||||||
|                                   const char *func, int line){ |                                   const char *func, int line) | ||||||
|  | { | ||||||
|     int show = show_bits(s, n); |     int show = show_bits(s, n); | ||||||
|     int r    = get_xbits(s, n); |     int r    = get_xbits(s, n); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -930,7 +930,7 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | |||||||
|                 }; SKIP_CACHE(re, &s->gb, 1); |                 }; SKIP_CACHE(re, &s->gb, 1); | ||||||
|  |  | ||||||
|                 last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); |                 last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); | ||||||
|                 run=   SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6); |                 run=   SHOW_UBITS(re, &s->gb, 6); | ||||||
|                 SKIP_COUNTER(re, &s->gb, 1+1+6); |                 SKIP_COUNTER(re, &s->gb, 1+1+6); | ||||||
|                 UPDATE_CACHE(re, &s->gb); |                 UPDATE_CACHE(re, &s->gb); | ||||||
|  |  | ||||||
| @@ -947,7 +947,7 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | |||||||
|                 }; SKIP_CACHE(re, &s->gb, 5); |                 }; SKIP_CACHE(re, &s->gb, 5); | ||||||
|  |  | ||||||
|                 level=  level * qmul + qadd; |                 level=  level * qmul + qadd; | ||||||
|                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1); |                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); | ||||||
|                 SKIP_COUNTER(re, &s->gb, 1+11+5+1); |                 SKIP_COUNTER(re, &s->gb, 1+11+5+1); | ||||||
|  |  | ||||||
|                 i+= run + 1; |                 i+= run + 1; | ||||||
| @@ -964,7 +964,7 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | |||||||
|                     /* third escape */ |                     /* third escape */ | ||||||
|                     SKIP_CACHE(re, &s->gb, 2); |                     SKIP_CACHE(re, &s->gb, 2); | ||||||
|                     last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); |                     last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); | ||||||
|                     run=   SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6); |                     run=   SHOW_UBITS(re, &s->gb, 6); | ||||||
|                     SKIP_COUNTER(re, &s->gb, 2+1+6); |                     SKIP_COUNTER(re, &s->gb, 2+1+6); | ||||||
|                     UPDATE_CACHE(re, &s->gb); |                     UPDATE_CACHE(re, &s->gb); | ||||||
|  |  | ||||||
| @@ -981,7 +981,7 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | |||||||
|                         if(SHOW_UBITS(re, &s->gb, 1)==0){ |                         if(SHOW_UBITS(re, &s->gb, 1)==0){ | ||||||
|                             av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n"); |                             av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n"); | ||||||
|                             return -1; |                             return -1; | ||||||
|                         }; LAST_SKIP_CACHE(re, &s->gb, 1); |                         } | ||||||
|  |  | ||||||
|                         SKIP_COUNTER(re, &s->gb, 1+12+1); |                         SKIP_COUNTER(re, &s->gb, 1+12+1); | ||||||
|                     } |                     } | ||||||
|   | |||||||
| @@ -24,6 +24,8 @@ | |||||||
|  * MPEG Audio decoder |  * MPEG Audio decoder | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #define UNCHECKED_BITSTREAM_READER 1 | ||||||
|  |  | ||||||
| #include "libavutil/audioconvert.h" | #include "libavutil/audioconvert.h" | ||||||
| #include "avcodec.h" | #include "avcodec.h" | ||||||
| #include "get_bits.h" | #include "get_bits.h" | ||||||
| @@ -1434,6 +1436,9 @@ static int mp_decode_layer3(MPADecodeContext *s) | |||||||
|         memcpy(s->last_buf + s->last_buf_size, ptr, EXTRABYTES); |         memcpy(s->last_buf + s->last_buf_size, ptr, EXTRABYTES); | ||||||
|         s->in_gb = s->gb; |         s->in_gb = s->gb; | ||||||
|         init_get_bits(&s->gb, s->last_buf, s->last_buf_size*8); |         init_get_bits(&s->gb, s->last_buf, s->last_buf_size*8); | ||||||
|  | #if CONFIG_SAFE_BITSTREAM_READER | ||||||
|  |         s->gb.size_in_bits_plus8 += EXTRABYTES * 8; | ||||||
|  | #endif | ||||||
|         skip_bits_long(&s->gb, 8*(s->last_buf_size - main_data_begin)); |         skip_bits_long(&s->gb, 8*(s->last_buf_size - main_data_begin)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1691,7 +1691,7 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | |||||||
|                     if(s->msmpeg4_version<=3){ |                     if(s->msmpeg4_version<=3){ | ||||||
|                         last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); |                         last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); | ||||||
|                         run=   SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6); |                         run=   SHOW_UBITS(re, &s->gb, 6); SKIP_CACHE(re, &s->gb, 6); | ||||||
|                         level= SHOW_SBITS(re, &s->gb, 8); LAST_SKIP_CACHE(re, &s->gb, 8); |                         level= SHOW_SBITS(re, &s->gb, 8); | ||||||
|                         SKIP_COUNTER(re, &s->gb, 1+6+8); |                         SKIP_COUNTER(re, &s->gb, 1+6+8); | ||||||
|                     }else{ |                     }else{ | ||||||
|                         int sign; |                         int sign; | ||||||
|   | |||||||
| @@ -25,6 +25,8 @@ | |||||||
|  * @author Ronald S. Bultje <rsbultje@gmail.com> |  * @author Ronald S. Bultje <rsbultje@gmail.com> | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #define UNCHECKED_BITSTREAM_READER 1 | ||||||
|  |  | ||||||
| #include <math.h> | #include <math.h> | ||||||
| #include "avcodec.h" | #include "avcodec.h" | ||||||
| #include "get_bits.h" | #include "get_bits.h" | ||||||
|   | |||||||
| @@ -97,6 +97,7 @@ endef | |||||||
| $(eval $(RULES)) | $(eval $(RULES)) | ||||||
|  |  | ||||||
| $(EXAMPLES) $(TESTPROGS) $(TOOLS): $(THIS_LIB) $(DEP_LIBS) | $(EXAMPLES) $(TESTPROGS) $(TOOLS): $(THIS_LIB) $(DEP_LIBS) | ||||||
|  | $(TESTPROGS): $(SUBDIR)$(LIBNAME) | ||||||
|  |  | ||||||
| examples: $(EXAMPLES) | examples: $(EXAMPLES) | ||||||
| testprogs: $(TESTPROGS) | testprogs: $(TESTPROGS) | ||||||
|   | |||||||
| @@ -483,8 +483,8 @@ yuv2gray16_X_c_template(SwsContext *c, const int16_t *lumFilter, | |||||||
|  |  | ||||||
|     for (i = 0; i < (dstW >> 1); i++) { |     for (i = 0; i < (dstW >> 1); i++) { | ||||||
|         int j; |         int j; | ||||||
|         int Y1 = 1 << 14; |         int Y1 = (1 << 14) - 0x40000000; | ||||||
|         int Y2 = 1 << 14; |         int Y2 = (1 << 14) - 0x40000000; | ||||||
|  |  | ||||||
|         for (j = 0; j < lumFilterSize; j++) { |         for (j = 0; j < lumFilterSize; j++) { | ||||||
|             Y1 += lumSrc[j][i * 2]     * lumFilter[j]; |             Y1 += lumSrc[j][i * 2]     * lumFilter[j]; | ||||||
| @@ -492,12 +492,10 @@ yuv2gray16_X_c_template(SwsContext *c, const int16_t *lumFilter, | |||||||
|         } |         } | ||||||
|         Y1 >>= 15; |         Y1 >>= 15; | ||||||
|         Y2 >>= 15; |         Y2 >>= 15; | ||||||
|         if ((Y1 | Y2) & 0x10000) { |         Y1 = av_clip_int16(Y1); | ||||||
|             Y1 = av_clip_uint16(Y1); |         Y2 = av_clip_int16(Y2); | ||||||
|             Y2 = av_clip_uint16(Y2); |         output_pixel(&dest[i * 2 + 0], 0x8000 + Y1); | ||||||
|         } |         output_pixel(&dest[i * 2 + 1], 0x8000 + Y2); | ||||||
|         output_pixel(&dest[i * 2 + 0], Y1); |  | ||||||
|         output_pixel(&dest[i * 2 + 1], Y2); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -851,8 +849,8 @@ yuv2rgb48_X_c_template(SwsContext *c, const int16_t *lumFilter, | |||||||
|  |  | ||||||
|     for (i = 0; i < (dstW >> 1); i++) { |     for (i = 0; i < (dstW >> 1); i++) { | ||||||
|         int j; |         int j; | ||||||
|         int Y1 = 0; |         int Y1 = -0x40000000; | ||||||
|         int Y2 = 0; |         int Y2 = -0x40000000; | ||||||
|         int U  = -128 << 23; // 19 |         int U  = -128 << 23; // 19 | ||||||
|         int V  = -128 << 23; |         int V  = -128 << 23; | ||||||
|         int R, G, B; |         int R, G, B; | ||||||
| @@ -868,7 +866,9 @@ yuv2rgb48_X_c_template(SwsContext *c, const int16_t *lumFilter, | |||||||
|  |  | ||||||
|         // 8bit: 12+15=27; 16-bit: 12+19=31 |         // 8bit: 12+15=27; 16-bit: 12+19=31 | ||||||
|         Y1 >>= 14; // 10 |         Y1 >>= 14; // 10 | ||||||
|  |         Y1 += 0x10000; | ||||||
|         Y2 >>= 14; |         Y2 >>= 14; | ||||||
|  |         Y2 += 0x10000; | ||||||
|         U  >>= 14; |         U  >>= 14; | ||||||
|         V  >>= 14; |         V  >>= 14; | ||||||
|  |  | ||||||
| @@ -1015,8 +1015,8 @@ YUV2PACKED16WRAPPER(yuv2, rgb48, bgr48be, PIX_FMT_BGR48BE) | |||||||
| YUV2PACKED16WRAPPER(yuv2, rgb48, bgr48le, PIX_FMT_BGR48LE) | YUV2PACKED16WRAPPER(yuv2, rgb48, bgr48le, PIX_FMT_BGR48LE) | ||||||
|  |  | ||||||
| static av_always_inline void | static av_always_inline void | ||||||
| yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, | yuv2rgb_write(uint8_t *_dest, int i, unsigned Y1, unsigned Y2, | ||||||
|               int U, int V, int A1, int A2, |               unsigned U, unsigned V, unsigned A1, unsigned A2, | ||||||
|               const void *_r, const void *_g, const void *_b, int y, |               const void *_r, const void *_g, const void *_b, int y, | ||||||
|               enum PixelFormat target, int hasAlpha) |               enum PixelFormat target, int hasAlpha) | ||||||
| { | { | ||||||
| @@ -1553,8 +1553,8 @@ rgb16_32ToY_c_template(int16_t *dst, const uint8_t *src, | |||||||
|                        int maskr, int maskg, int maskb, |                        int maskr, int maskg, int maskb, | ||||||
|                        int rsh,   int gsh,   int bsh, int S) |                        int rsh,   int gsh,   int bsh, int S) | ||||||
| { | { | ||||||
|     const int ry = RY << rsh, gy = GY << gsh, by = BY << bsh, |     const int ry = RY << rsh, gy = GY << gsh, by = BY << bsh; | ||||||
|               rnd = (32<<((S)-1)) + (1<<(S-7)); |     const unsigned rnd = (32<<((S)-1)) + (1<<(S-7)); | ||||||
|     int i; |     int i; | ||||||
|  |  | ||||||
|     for (i = 0; i < width; i++) { |     for (i = 0; i < width; i++) { | ||||||
| @@ -1576,8 +1576,8 @@ rgb16_32ToUV_c_template(int16_t *dstU, int16_t *dstV, | |||||||
|                         int rsh,   int gsh,   int bsh, int S) |                         int rsh,   int gsh,   int bsh, int S) | ||||||
| { | { | ||||||
|     const int ru = RU << rsh, gu = GU << gsh, bu = BU << bsh, |     const int ru = RU << rsh, gu = GU << gsh, bu = BU << bsh, | ||||||
|               rv = RV << rsh, gv = GV << gsh, bv = BV << bsh, |               rv = RV << rsh, gv = GV << gsh, bv = BV << bsh; | ||||||
|               rnd = (256<<((S)-1)) + (1<<(S-7)); |     const unsigned rnd = (256u<<((S)-1)) + (1<<(S-7)); | ||||||
|     int i; |     int i; | ||||||
|  |  | ||||||
|     for (i = 0; i < width; i++) { |     for (i = 0; i < width; i++) { | ||||||
| @@ -1601,7 +1601,8 @@ rgb16_32ToUV_half_c_template(int16_t *dstU, int16_t *dstV, | |||||||
| { | { | ||||||
|     const int ru = RU << rsh, gu = GU << gsh, bu = BU << bsh, |     const int ru = RU << rsh, gu = GU << gsh, bu = BU << bsh, | ||||||
|               rv = RV << rsh, gv = GV << gsh, bv = BV << bsh, |               rv = RV << rsh, gv = GV << gsh, bv = BV << bsh, | ||||||
|               rnd = (256U<<(S)) + (1<<(S-6)), maskgx = ~(maskr | maskb); |               maskgx = ~(maskr | maskb); | ||||||
|  |     const unsigned rnd = (256U<<(S)) + (1<<(S-6)); | ||||||
|     int i; |     int i; | ||||||
|  |  | ||||||
|     maskr |= maskr << 1; maskb |= maskb << 1; maskg |= maskg << 1; |     maskr |= maskr << 1; maskb |= maskb << 1; maskg |= maskg << 1; | ||||||
|   | |||||||
| @@ -667,6 +667,12 @@ static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[ | |||||||
|     return srcSliceH; |     return srcSliceH; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define IS_DIFFERENT_ENDIANESS(src_fmt, dst_fmt, pix_fmt)          \ | ||||||
|  |     ((src_fmt == pix_fmt ## BE && dst_fmt == pix_fmt ## LE) ||     \ | ||||||
|  |      (src_fmt == pix_fmt ## LE && dst_fmt == pix_fmt ## BE)) | ||||||
|  |  | ||||||
|  |  | ||||||
| void ff_get_unscaled_swscale(SwsContext *c) | void ff_get_unscaled_swscale(SwsContext *c) | ||||||
| { | { | ||||||
|     const enum PixelFormat srcFormat = c->srcFormat; |     const enum PixelFormat srcFormat = c->srcFormat; | ||||||
| @@ -697,15 +703,6 @@ void ff_get_unscaled_swscale(SwsContext *c) | |||||||
|     if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND)) |     if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND)) | ||||||
|         c->swScale= bgr24ToYv12Wrapper; |         c->swScale= bgr24ToYv12Wrapper; | ||||||
|  |  | ||||||
|     /* bswap 16 bits per component packed 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)  || |  | ||||||
|         (srcFormat == PIX_FMT_GRAY16LE && dstFormat == PIX_FMT_GRAY16BE) || |  | ||||||
|         (srcFormat == PIX_FMT_GRAY16BE && dstFormat == PIX_FMT_GRAY16LE)) |  | ||||||
|         c->swScale = packed_16bpc_bswap; |  | ||||||
|  |  | ||||||
|     /* RGB/BGR -> RGB/BGR (no dither needed forms) */ |     /* RGB/BGR -> RGB/BGR (no dither needed forms) */ | ||||||
|     if (   isAnyRGB(srcFormat) |     if (   isAnyRGB(srcFormat) | ||||||
|         && isAnyRGB(dstFormat) |         && isAnyRGB(dstFormat) | ||||||
| @@ -735,6 +732,18 @@ void ff_get_unscaled_swscale(SwsContext *c) | |||||||
|     if (isAnyRGB(srcFormat) && isPlanar(srcFormat) && isByteRGB(dstFormat)) |     if (isAnyRGB(srcFormat) && isPlanar(srcFormat) && isByteRGB(dstFormat)) | ||||||
|         c->swScale= planarRgbToRgbWrapper; |         c->swScale= planarRgbToRgbWrapper; | ||||||
|  |  | ||||||
|  |     /* bswap 16 bits per pixel/component packed formats */ | ||||||
|  |     if (IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_BGR444) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_BGR48)  || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_BGR555) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_BGR565) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_GRAY16) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_RGB444) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_RGB48)  || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_RGB555) || | ||||||
|  |         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, PIX_FMT_RGB565)) | ||||||
|  |         c->swScale = packed_16bpc_bswap; | ||||||
|  |  | ||||||
|     if (usePal(srcFormat) && isByteRGB(dstFormat)) |     if (usePal(srcFormat) && isByteRGB(dstFormat)) | ||||||
|         c->swScale= palToRgbWrapper; |         c->swScale= palToRgbWrapper; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ fate-ea-tgv-ima-ea-eacs: CMD = framecrc  -i $(SAMPLES)/ea-tgv/INTRO8K-partial.TG | |||||||
| FATE_TESTS += fate-ea-tgv-ima-ea-sead | FATE_TESTS += fate-ea-tgv-ima-ea-sead | ||||||
| fate-ea-tgv-ima-ea-sead: CMD = framecrc  -i $(SAMPLES)/ea-tgv/INTEL_S.TGV -pix_fmt rgb24 | fate-ea-tgv-ima-ea-sead: CMD = framecrc  -i $(SAMPLES)/ea-tgv/INTEL_S.TGV -pix_fmt rgb24 | ||||||
| FATE_TESTS += fate-ea-tqi-adpcm | FATE_TESTS += fate-ea-tqi-adpcm | ||||||
| fate-ea-tqi-adpcm: CMD = framecrc  -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve | fate-ea-tqi-adpcm: CMD = framecrc  -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:v 26 | ||||||
| FATE_TESTS += fate-ea-vp60 | FATE_TESTS += fate-ea-vp60 | ||||||
| fate-ea-vp60: CMD = framecrc  -i $(SAMPLES)/ea-vp6/g36.vp6 | fate-ea-vp60: CMD = framecrc  -i $(SAMPLES)/ea-vp6/g36.vp6 | ||||||
| FATE_TESTS += fate-ea-vp61 | FATE_TESTS += fate-ea-vp61 | ||||||
|   | |||||||
| @@ -49,4 +49,3 @@ | |||||||
| 0, 144000, 115200, 0x65fd5e60 | 0, 144000, 115200, 0x65fd5e60 | ||||||
| 1, 144000, 5936, 0x2174304d | 1, 144000, 5936, 0x2174304d | ||||||
| 0, 150000, 115200, 0x0c256424 | 0, 150000, 115200, 0x0c256424 | ||||||
| 0, 156000, 115200, 0xa9cdd8d2 |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael Niedermayer
					Michael Niedermayer