From 6b34fbba9b73e1914d56c2aff96356326002430d Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Thu, 24 Nov 2011 23:15:59 +0000 Subject: [PATCH 1/9] MK(BE)TAG: avoid undefined shifts Casting the left-most byte to unsigned avoids an undefined result of the shift by 24 if bit 7 is set. This affects the rm demuxer. Signed-off-by: Mans Rullgard --- libavutil/common.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavutil/common.h b/libavutil/common.h index 9691f5bcf8..7e93a1ab47 100644 --- a/libavutil/common.h +++ b/libavutil/common.h @@ -218,8 +218,8 @@ static av_always_inline av_const int av_popcount_c(uint32_t x) return (x + (x >> 16)) & 0x3F; } -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((a) << 24)) +#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) +#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) /** * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. From d14d4d982cca55b34092fb71204b9a3f3749acd7 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Wed, 23 Nov 2011 01:28:14 +0100 Subject: [PATCH 2/9] aacdec: add more fate tests covering SBR and PS Add all seven test bitstreams of Coding Technologies "aacPlus Decoder Check Package". The streams cover different ways to signal SBR and PS in different formats. --- tests/fate/aac.mak | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/fate/aac.mak b/tests/fate/aac.mak index 8c805575f3..9abae7d866 100644 --- a/tests/fate/aac.mak +++ b/tests/fate/aac.mak @@ -38,6 +38,19 @@ FATE_AAC += fate-aac-ap05_48 fate-aac-ap05_48: CMD = pcm -i $(SAMPLES)/aac/ap05_48.mp4 fate-aac-ap05_48: REF = $(SAMPLES)/aac/ap05_48.s16 +fate-aac-ct%: CMD = pcm -i $(SAMPLES)/aac/CT_DecoderCheck/$(@:fate-aac-ct-%=%) +fate-aac-ct%: REF = $(SAMPLES)/aac/CT_DecoderCheck/aacPlusv2.wav + +FATE_AAC_CT = sbr_bc-ps_i.3gp \ + sbr_bic-ps_i.3gp \ + sbr_i-ps_i.aac \ + sbr_bc-ps_bc.mp4 \ + sbr_bc-ps_i.mp4 \ + sbr_i-ps_bic.mp4 \ + sbr_i-ps_i.mp4 + +FATE_AAC += $(FATE_AAC_CT:%=fate-aac-ct-%) + FATE_TESTS += $(FATE_AAC) fate-aac: $(FATE_AAC) $(FATE_AAC): CMP = oneoff From 117e2a30f254820e0fd4e4d5d9fbab757f17590f Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 24 Nov 2011 01:50:05 +0100 Subject: [PATCH 3/9] frame-mt: return consumed packet size in ff_thread_decode_frame This is required to fulfill avcodec_decode_video2() promise to return the number of consumed bytes on success. --- libavcodec/pthread.c | 5 +++-- libavcodec/thread.h | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 9c3453f13d..3364376a66 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -522,7 +522,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx, if (fctx->next_decoding >= (avctx->thread_count-1)) fctx->delaying = 0; *got_picture_ptr=0; - return 0; + return avpkt->size; } /* @@ -563,7 +563,8 @@ int ff_thread_decode_frame(AVCodecContext *avctx, fctx->next_finished = finished; - return p->result; + /* return the size of the consumed packet if no error occurred */ + return (p->result >= 0) ? avpkt->size : p->result; } void ff_thread_report_progress(AVFrame *f, int n, int field) diff --git a/libavcodec/thread.h b/libavcodec/thread.h index 401c4d25a8..dfd261df1c 100644 --- a/libavcodec/thread.h +++ b/libavcodec/thread.h @@ -42,6 +42,9 @@ void ff_thread_flush(AVCodecContext *avctx); * Submits a new frame to a decoding thread. * Returns the next available frame in picture. *got_picture_ptr * will be 0 if none is available. + * The return value on success is the size of the consumed packet for + * compatiblity with avcodec_decode_video2(). This means the decoder + * has to consume the full packet. * * Parameters are the same as avcodec_decode_video2(). */ From 035af998ad03020a3dda4e662dfb97c68bbabaaa Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Thu, 24 Nov 2011 23:03:25 +0100 Subject: [PATCH 4/9] nullenc: drop AVFMT_RAWPICTURE from the flags This makes the two pass encoding with x264 working with -f null - as first pass. --- libavformat/nullenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/nullenc.c b/libavformat/nullenc.c index 79fc02e528..680b29c828 100644 --- a/libavformat/nullenc.c +++ b/libavformat/nullenc.c @@ -32,5 +32,5 @@ AVOutputFormat ff_null_muxer = { .audio_codec = AV_NE(CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE), .video_codec = CODEC_ID_RAWVIDEO, .write_packet = null_write_packet, - .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS, + .flags = AVFMT_NOFILE | AVFMT_NOTIMESTAMPS, }; From 00a856e3f95214c54a878b7cbd6e8ae8c5ce3ca9 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Sun, 23 Oct 2011 17:39:49 +0100 Subject: [PATCH 5/9] dca: ARMv6 optimised decode_blockcode() This is a hand-tuned version of the code with impossible parts of the FASTDIV function ommitted. 2-5% faster overall on Cortex-A8. Signed-off-by: Mans Rullgard --- libavcodec/arm/dca.h | 55 ++++++++++++++++++++++++++++++++++++++++++++ libavcodec/dca.c | 27 ++++++++++++++-------- 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/libavcodec/arm/dca.h b/libavcodec/arm/dca.h index 38c8d1f9cc..9ff7f7c75e 100644 --- a/libavcodec/arm/dca.h +++ b/libavcodec/arm/dca.h @@ -23,6 +23,61 @@ #include #include "config.h" +#include "libavutil/intmath.h" + +#if HAVE_ARMV6 && HAVE_INLINE_ASM + +#define decode_blockcodes decode_blockcodes +static inline int decode_blockcodes(int code1, int code2, int levels, + int *values) +{ + int v0, v1, v2, v3, v4, v5; + + __asm__ ("smmul %8, %14, %18 \n" + "smmul %11, %15, %18 \n" + "smlabb %14, %8, %17, %14 \n" + "smlabb %15, %11, %17, %15 \n" + "smmul %9, %8, %18 \n" + "smmul %12, %11, %18 \n" + "sub %14, %14, %16, lsr #1 \n" + "sub %15, %15, %16, lsr #1 \n" + "smlabb %8, %9, %17, %8 \n" + "smlabb %11, %12, %17, %11 \n" + "smmul %10, %9, %18 \n" + "smmul %13, %12, %18 \n" + "str %14, %0 \n" + "str %15, %4 \n" + "sub %8, %8, %16, lsr #1 \n" + "sub %11, %11, %16, lsr #1 \n" + "smlabb %9, %10, %17, %9 \n" + "smlabb %12, %13, %17, %12 \n" + "smmul %14, %10, %18 \n" + "smmul %15, %13, %18 \n" + "str %8, %1 \n" + "str %11, %5 \n" + "sub %9, %9, %16, lsr #1 \n" + "sub %12, %12, %16, lsr #1 \n" + "smlabb %10, %14, %17, %10 \n" + "smlabb %13, %15, %17, %13 \n" + "str %9, %2 \n" + "str %12, %6 \n" + "sub %10, %10, %16, lsr #1 \n" + "sub %13, %13, %16, lsr #1 \n" + "str %10, %3 \n" + "str %13, %7 \n" + : "=m"(values[0]), "=m"(values[1]), + "=m"(values[2]), "=m"(values[3]), + "=m"(values[4]), "=m"(values[5]), + "=m"(values[6]), "=m"(values[7]), + "=&r"(v0), "=&r"(v1), "=&r"(v2), + "=&r"(v3), "=&r"(v4), "=&r"(v5), + "+&r"(code1), "+&r"(code2) + : "r"(levels - 1), "r"(-levels), "r"(ff_inverse[levels])); + + return code1 | code2; +} + +#endif #if HAVE_NEON && HAVE_INLINE_ASM && HAVE_ASM_MOD_Y diff --git a/libavcodec/dca.c b/libavcodec/dca.c index 7f7bcf9cfd..b310638dc1 100644 --- a/libavcodec/dca.c +++ b/libavcodec/dca.c @@ -1038,6 +1038,7 @@ static void dca_downmix(float *samples, int srcfmt, } +#ifndef decode_blockcodes /* Very compact version of the block code decoder that does not use table * look-up but is slightly slower */ static int decode_blockcode(int code, int levels, int *values) @@ -1051,14 +1052,16 @@ static int decode_blockcode(int code, int levels, int *values) code = div; } - if (code == 0) - return 0; - else { - av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n"); - return AVERROR_INVALIDDATA; - } + return code; } +static int decode_blockcodes(int code1, int code2, int levels, int *values) +{ + return decode_blockcode(code1, levels, values) | + decode_blockcode(code2, levels, values + 4); +} +#endif + static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 }; static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 }; @@ -1125,16 +1128,20 @@ static int dca_subsubframe(DCAContext * s, int base_channel, int block_index) if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table){ if (abits <= 7){ /* Block code */ - int block_code1, block_code2, size, levels; + int block_code1, block_code2, size, levels, err; size = abits_sizes[abits-1]; levels = abits_levels[abits-1]; block_code1 = get_bits(&s->gb, size); - /* FIXME Should test return value */ - decode_blockcode(block_code1, levels, block); block_code2 = get_bits(&s->gb, size); - decode_blockcode(block_code2, levels, &block[4]); + err = decode_blockcodes(block_code1, block_code2, + levels, block); + if (err) { + av_log(s->avctx, AV_LOG_ERROR, + "ERROR: block code look-up failed\n"); + return AVERROR_INVALIDDATA; + } }else{ /* no coding */ for (m = 0; m < 8; m++) From cc276c85d15272df6e44fb3252657a43cbd49555 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 25 Nov 2011 12:51:57 +0000 Subject: [PATCH 6/9] Make channel layout masks unsigned It makes more sense for a bit mask to use an unsigned type. The change should be source and binary compatible on all supported systems, hence micro version bump. Fixes a few invalid shifts. Signed-off-by: Mans Rullgard --- libavcodec/aac_ac3_parser.h | 2 +- libavcodec/aacdectab.h | 2 +- libavcodec/ac3.h | 2 +- libavcodec/ac3enc.c | 6 +++--- libavcodec/ac3enc.h | 2 +- libavcodec/audioconvert.c | 2 +- libavcodec/audioconvert.h | 2 +- libavcodec/avcodec.h | 6 +++--- libavcodec/dca.c | 2 +- libavcodec/mlp_parser.c | 2 +- libavcodec/version.h | 2 +- libavcodec/vorbis.h | 2 +- libavcodec/vorbis_data.c | 2 +- libavdevice/alsa-audio-common.c | 4 ++-- libavfilter/asrc_anullsrc.c | 2 +- libavfilter/avfilter.c | 2 +- libavfilter/avfilter.h | 14 +++++++------- libavfilter/defaults.c | 4 ++-- libavutil/audioconvert.c | 8 ++++---- libavutil/audioconvert.h | 8 ++++---- libavutil/avutil.h | 2 +- 21 files changed, 39 insertions(+), 39 deletions(-) diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h index c4ed816d93..a14fce5190 100644 --- a/libavcodec/aac_ac3_parser.h +++ b/libavcodec/aac_ac3_parser.h @@ -48,7 +48,7 @@ typedef struct AACAC3ParseContext { int sample_rate; int bit_rate; int samples; - int64_t channel_layout; + uint64_t channel_layout; int service_type; int remaining_size; diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h index 23a7868ab2..4f8d84b241 100644 --- a/libavcodec/aacdectab.h +++ b/libavcodec/aacdectab.h @@ -90,7 +90,7 @@ static const uint8_t aac_channel_layout_map[7][5][2] = { { { TYPE_CPE, 0 }, { TYPE_SCE, 0 }, { TYPE_LFE, 0 }, { TYPE_CPE, 2 }, { TYPE_CPE, 1 }, }, }; -static const int64_t aac_channel_layout[8] = { +static const uint64_t aac_channel_layout[8] = { AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_SURROUND, diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h index 9adad93db8..304c86c181 100644 --- a/libavcodec/ac3.h +++ b/libavcodec/ac3.h @@ -118,7 +118,7 @@ typedef struct { uint32_t bit_rate; uint8_t channels; uint16_t frame_size; - int64_t channel_layout; + uint64_t channel_layout; /** @} */ } AC3HeaderInfo; diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index c1564d2a3a..b8e23e49f6 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -77,7 +77,7 @@ static uint8_t exponent_group_tab[2][3][256]; /** * List of supported channel layouts. */ -const int64_t ff_ac3_channel_layouts[19] = { +const uint64_t ff_ac3_channel_layouts[19] = { AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_2_1, @@ -2063,13 +2063,13 @@ av_cold int ff_ac3_encode_close(AVCodecContext *avctx) * Set channel information during initialization. */ static av_cold int set_channel_info(AC3EncodeContext *s, int channels, - int64_t *channel_layout) + uint64_t *channel_layout) { int ch_layout; if (channels < 1 || channels > AC3_MAX_CHANNELS) return AVERROR(EINVAL); - if ((uint64_t)*channel_layout > 0x7FF) + if (*channel_layout > 0x7FF) return AVERROR(EINVAL); ch_layout = *channel_layout; if (!ch_layout) diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 4a017498f6..6ef1a5373a 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -258,7 +258,7 @@ typedef struct AC3EncodeContext { } AC3EncodeContext; -extern const int64_t ff_ac3_channel_layouts[19]; +extern const uint64_t ff_ac3_channel_layouts[19]; int ff_ac3_encode_init(AVCodecContext *avctx); diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c index 4bea30848f..a24434547e 100644 --- a/libavcodec/audioconvert.c +++ b/libavcodec/audioconvert.c @@ -48,7 +48,7 @@ void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt) } #endif -int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name) +uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name) { switch(nb_channels) { case 1: return AV_CH_LAYOUT_MONO; diff --git a/libavcodec/audioconvert.h b/libavcodec/audioconvert.h index e9a78fe495..f50eb3e1bb 100644 --- a/libavcodec/audioconvert.h +++ b/libavcodec/audioconvert.h @@ -80,7 +80,7 @@ int avcodec_channel_layout_num_channels(int64_t channel_layout); * @param fmt_name Format name, or NULL if unknown * @return Channel layout mask */ -int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name); +uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name); struct AVAudioConvert; typedef struct AVAudioConvert AVAudioConvert; diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index dc794b0538..8005af4fd5 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2696,14 +2696,14 @@ typedef struct AVCodecContext { * - encoding: set by user. * - decoding: set by libavcodec. */ - int64_t channel_layout; + uint64_t channel_layout; /** * Request decoder to use this channel layout if it can (0 for default) * - encoding: unused * - decoding: Set by user. */ - int64_t request_channel_layout; + uint64_t request_channel_layout; /** * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. @@ -3044,7 +3044,7 @@ typedef struct AVCodec { const char *long_name; const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 + const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 uint8_t max_lowres; ///< maximum value for lowres supported by the decoder const AVClass *priv_class; ///< AVClass for the private context const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} diff --git a/libavcodec/dca.c b/libavcodec/dca.c index b310638dc1..9d24b595c2 100644 --- a/libavcodec/dca.c +++ b/libavcodec/dca.c @@ -128,7 +128,7 @@ static const int dca_ext_audio_descr_mask[] = { * All 2 channel configurations -> AV_CH_LAYOUT_STEREO */ -static const int64_t dca_core_channel_layout[] = { +static const uint64_t dca_core_channel_layout[] = { AV_CH_FRONT_CENTER, ///< 1, A AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono) AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo) diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c index 0fca1967c5..e0fedeb7e9 100644 --- a/libavcodec/mlp_parser.c +++ b/libavcodec/mlp_parser.c @@ -107,7 +107,7 @@ static int truehd_channels(int chanmap) return channels; } -static int64_t truehd_layout(int chanmap) +static uint64_t truehd_layout(int chanmap) { int layout = 0, i; diff --git a/libavcodec/version.h b/libavcodec/version.h index 6280e1c1c9..2313fae021 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -22,7 +22,7 @@ #define LIBAVCODEC_VERSION_MAJOR 53 #define LIBAVCODEC_VERSION_MINOR 22 -#define LIBAVCODEC_VERSION_MICRO 0 +#define LIBAVCODEC_VERSION_MICRO 1 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/libavcodec/vorbis.h b/libavcodec/vorbis.h index 8501e0a178..a55523f17e 100644 --- a/libavcodec/vorbis.h +++ b/libavcodec/vorbis.h @@ -27,7 +27,7 @@ extern const float ff_vorbis_floor1_inverse_db_table[256]; extern const float * const ff_vorbis_vwin[8]; extern const uint8_t ff_vorbis_channel_layout_offsets[8][8]; extern const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8]; -extern const int64_t ff_vorbis_channel_layouts[9]; +extern const uint64_t ff_vorbis_channel_layouts[9]; typedef struct { uint16_t x; diff --git a/libavcodec/vorbis_data.c b/libavcodec/vorbis_data.c index 4e1fe00863..bd27b82d4a 100644 --- a/libavcodec/vorbis_data.c +++ b/libavcodec/vorbis_data.c @@ -44,7 +44,7 @@ const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8] = { { 0, 2, 1, 6, 7, 4, 5, 3 }, }; -const int64_t ff_vorbis_channel_layouts[9] = { +const uint64_t ff_vorbis_channel_layouts[9] = { AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_SURROUND, diff --git a/libavdevice/alsa-audio-common.c b/libavdevice/alsa-audio-common.c index a0662f6d8e..cfee28c516 100644 --- a/libavdevice/alsa-audio-common.c +++ b/libavdevice/alsa-audio-common.c @@ -143,7 +143,7 @@ switch(format) {\ case FORMAT_F32: s->reorder_func = alsa_reorder_f32_out_ ##layout; break;\ } -static av_cold int find_reorder_func(AlsaData *s, int codec_id, int64_t layout, int out) +static av_cold int find_reorder_func(AlsaData *s, int codec_id, uint64_t layout, int out) { int format; @@ -194,7 +194,7 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode, snd_pcm_t *h; snd_pcm_hw_params_t *hw_params; snd_pcm_uframes_t buffer_size, period_size; - int64_t layout = ctx->streams[0]->codec->channel_layout; + uint64_t layout = ctx->streams[0]->codec->channel_layout; if (ctx->filename[0] == 0) audio_device = "default"; else audio_device = ctx->filename; diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c index dd671c5d53..8e99012faf 100644 --- a/libavfilter/asrc_anullsrc.c +++ b/libavfilter/asrc_anullsrc.c @@ -25,7 +25,7 @@ #include "libavutil/audioconvert.h" typedef struct { - int64_t channel_layout; + uint64_t channel_layout; int64_t sample_rate; } ANullContext; diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 2f24aa3d98..b0304d64d5 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -349,7 +349,7 @@ fail: AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar) + uint64_t channel_layout, int planar) { AVFilterBufferRef *ret = NULL; diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index f83c861f4b..c40d9f4d04 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 2 #define LIBAVFILTER_VERSION_MINOR 13 -#define LIBAVFILTER_VERSION_MICRO 0 +#define LIBAVFILTER_VERSION_MICRO 1 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ @@ -100,7 +100,7 @@ typedef struct AVFilterBuffer { * per reference properties must be separated out. */ typedef struct AVFilterBufferRefAudioProps { - int64_t channel_layout; ///< channel layout of audio buffer + uint64_t channel_layout; ///< channel layout of audio buffer int nb_samples; ///< number of audio samples int size; ///< audio buffer size uint32_t sample_rate; ///< audio buffer sample rate @@ -376,7 +376,7 @@ struct AVFilterPad { */ AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar); + uint64_t channel_layout, int planar); /** * Callback called after the slices of a frame are completely sent. If @@ -465,7 +465,7 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, /** default handler for get_audio_buffer() for audio inputs */ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar); + uint64_t channel_layout, int planar); /** * A helper for query_formats() which sets all links to the same list of @@ -496,7 +496,7 @@ AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, /** get_audio_buffer() handler for filters which simply pass audio along */ AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar); + uint64_t channel_layout, int planar); /** * Filter definition. This defines the pads a filter contains, and all the @@ -589,7 +589,7 @@ struct AVFilterLink { int h; ///< agreed upon image height AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio /* These two parameters apply only to audio */ - int64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h) + uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h) int64_t sample_rate; ///< samples per second int format; ///< agreed upon media format @@ -688,7 +688,7 @@ avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int */ AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar); + uint64_t channel_layout, int planar); /** * Request an input frame from the filter at the other end of the link. diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c index b891ab1f22..4c7e878f9e 100644 --- a/libavfilter/defaults.c +++ b/libavfilter/defaults.c @@ -57,7 +57,7 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int per AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int planar) + uint64_t channel_layout, int planar) { AVFilterBuffer *samples = av_mallocz(sizeof(AVFilterBuffer)); AVFilterBufferRef *ref = NULL; @@ -292,7 +292,7 @@ AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, - int64_t channel_layout, int packed) + uint64_t channel_layout, int packed) { return avfilter_get_audio_buffer(link->dst->outputs[0], perms, sample_fmt, size, channel_layout, packed); diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c index 7250e36d90..52656c7302 100644 --- a/libavutil/audioconvert.c +++ b/libavutil/audioconvert.c @@ -60,7 +60,7 @@ static const char *get_channel_name(int channel_id) static const struct { const char *name; int nb_channels; - int64_t layout; + uint64_t layout; } channel_layout_map[] = { { "mono", 1, AV_CH_LAYOUT_MONO }, { "stereo", 2, AV_CH_LAYOUT_STEREO }, @@ -77,7 +77,7 @@ static const struct { { 0 } }; -int64_t av_get_channel_layout(const char *name) +uint64_t av_get_channel_layout(const char *name) { int i = 0; do { @@ -90,7 +90,7 @@ int64_t av_get_channel_layout(const char *name) } void av_get_channel_layout_string(char *buf, int buf_size, - int nb_channels, int64_t channel_layout) + int nb_channels, uint64_t channel_layout) { int i; @@ -123,7 +123,7 @@ void av_get_channel_layout_string(char *buf, int buf_size, } } -int av_get_channel_layout_nb_channels(int64_t channel_layout) +int av_get_channel_layout_nb_channels(uint64_t channel_layout) { int count; uint64_t x = channel_layout; diff --git a/libavutil/audioconvert.h b/libavutil/audioconvert.h index 1c5cfa0a8e..54b13b2bea 100644 --- a/libavutil/audioconvert.h +++ b/libavutil/audioconvert.h @@ -62,7 +62,7 @@ /** Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests the channel order of the decoder output to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000LL +#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL /** * @} @@ -92,7 +92,7 @@ /** * Return a channel layout id that matches name, 0 if no match. */ -int64_t av_get_channel_layout(const char *name); +uint64_t av_get_channel_layout(const char *name); /** * Return a description of a channel layout. @@ -101,12 +101,12 @@ int64_t av_get_channel_layout(const char *name); * @param buf put here the string containing the channel layout * @param buf_size size in bytes of the buffer */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout); +void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); /** * Return the number of channels in the channel layout. */ -int av_get_channel_layout_nb_channels(int64_t channel_layout); +int av_get_channel_layout_nb_channels(uint64_t channel_layout); /** * @} diff --git a/libavutil/avutil.h b/libavutil/avutil.h index a2d3073467..0400d939c6 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -154,7 +154,7 @@ #define LIBAVUTIL_VERSION_MAJOR 51 #define LIBAVUTIL_VERSION_MINOR 19 -#define LIBAVUTIL_VERSION_MICRO 0 +#define LIBAVUTIL_VERSION_MICRO 1 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ From be1e872582c861873bd9ca8c1098da55f41bced4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?= Date: Thu, 24 Nov 2011 19:43:46 -0500 Subject: [PATCH 7/9] configure: Store vda lib flags in extralibs instead of ldflags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way the needed linking flags end up in libavcodec.pc. Signed-off-by: Martin Storsjö --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 57630f2a53..a0dc6e08f8 100755 --- a/configure +++ b/configure @@ -3002,7 +3002,7 @@ check_func XFixesGetCursorImage -lX11 -lXext -lXfixes # check for VDA header if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then - enable vda && add_ldflags -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore + enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore fi if ! disabled vdpau && enabled vdpau_vdpau_h; then From 019dd2365729d44d66a5b629102e1ecb919f4f67 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 25 Nov 2011 14:58:50 +0000 Subject: [PATCH 8/9] Fix av_get_channel_layout_string() for positions >31 A value shifted left by >31 needs to have a 64-bit type. As there are no defined channels in this range, the fix is purely theoretical at this point, although it does avoid some invalid shifts triggering the overflow checker. Signed-off-by: Mans Rullgard --- libavutil/audioconvert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c index 52656c7302..e9f9e411aa 100644 --- a/libavutil/audioconvert.c +++ b/libavutil/audioconvert.c @@ -109,7 +109,7 @@ void av_get_channel_layout_string(char *buf, int buf_size, int i, ch; av_strlcat(buf, " (", buf_size); for (i = 0, ch = 0; i < 64; i++) { - if ((channel_layout & (1L << i))) { + if ((channel_layout & (UINT64_C(1) << i))) { const char *name = get_channel_name(i); if (name) { if (ch > 0) From f32dfad9dc64acf0fd1bb867e127a9efe6380676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 25 Nov 2011 00:45:16 +0200 Subject: [PATCH 9/9] swscale: Readd #define _SVID_SOURCE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was removed erroneously in 046f081b46c8479820409cf8f530b988221bd15b. This define still is necessary for getting MAP_ANONYMOUS defined on linux/glibc, despite the define reshuffling done in that commit. Without MAP_ANONYMOUS defined, the mprotect calls for setting the generated mmx2 scaler code pages executable are left out, causing crashes if that codepath is chosen. This patch fixes scaling from 192x144 to 320x240 with -sws_flags fast_bilinear, which crashes on linux at the moment. Signed-off-by: Martin Storsjö --- libswscale/utils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libswscale/utils.c b/libswscale/utils.c index 7a969867ed..4458e8f700 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _SVID_SOURCE //needed for MAP_ANONYMOUS #include #include #include