From 6b34fbba9b73e1914d56c2aff96356326002430d Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Thu, 24 Nov 2011 23:15:59 +0000 Subject: 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(-) (limited to 'libavutil') 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. -- cgit v1.2.3 From cc276c85d15272df6e44fb3252657a43cbd49555 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 25 Nov 2011 12:51:57 +0000 Subject: 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(-) (limited to 'libavutil') 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, \ -- cgit v1.2.3 From 019dd2365729d44d66a5b629102e1ecb919f4f67 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 25 Nov 2011 14:58:50 +0000 Subject: 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(-) (limited to 'libavutil') 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) -- cgit v1.2.3