[SCM] libgroove/upstream: update bundled libav to e780c3daa
andrewrk-guest at users.alioth.debian.org
andrewrk-guest at users.alioth.debian.org
Sat May 31 19:00:02 UTC 2014
The following commit has been merged in the upstream branch:
commit 4f01f123c2519be431b4ee33ffac2ad478e1e0d5
Author: Andrew Kelley <superjoe30 at gmail.com>
Date: Sun May 25 12:52:46 2014 -0700
update bundled libav to e780c3daa
This is the latest stable 10 release.
diff --git a/deps/libav/Changelog b/deps/libav/Changelog
index 29902f4..30e63c9 100644
--- a/deps/libav/Changelog
+++ b/deps/libav/Changelog
@@ -1,6 +1,31 @@
Entries are sorted chronologically from oldest to youngest within each release,
releases are sorted from youngest to oldest.
+version 10.1:
+- pcm-dvd: Fix 20bit decoding (bug/592)
+- avi: Improve non-interleaved detection (bug/666)
+- arm: hpeldsp: fix put_pixels8_y2_{,no_rnd_}armv6
+- arm: hpeldsp: prevent overreads in armv6 asm (bug/646)
+- avfilter: Add missing emms_c when needed
+- rtmpproto: Check the buffer sizes when copying app/playpath strings
+- swscale: Fix an undefined behaviour
+- vp9: Read the frame size as unsigned
+- dcadec: Use correct channel count in stereo downmix check
+- dcadec: Do not decode the XCh extension when downmixing to stereo
+- matroska: add the Opus mapping
+- matroskadec: read the CodecDelay element
+- rtmpproto: Make sure to pass on the error code if read_connect failed
+- lavr: allocate the resampling buffer with a positive size
+- mp3enc: Properly write bitrate value in XING header (debian/736088)
+- golomb: Fix the implementation of get_se_golomb_long
+
+version 10:
+- af_channelmap: fix ONE_STR mapping mode
+- matroskaenc: HEVC fixeswrite private data in hvcC format for HEVC.
+- doc: Point to the correct, actually maintained gas-preprocessor repo
+- http: Add support reading ICY metadata
+- configure: Support older version of openjpeg1
+
version 10~beta2:
- compand audio filter
- and many various smaller fixes, for a full changelog, please refer to:
diff --git a/deps/libav/libavcodec/dcadec.c b/deps/libav/libavcodec/dcadec.c
index 6c240ee..ce8660d 100644
--- a/deps/libav/libavcodec/dcadec.c
+++ b/deps/libav/libavcodec/dcadec.c
@@ -1856,6 +1856,16 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
if (s->amode < 16) {
avctx->channel_layout = dca_core_channel_layout[s->amode];
+ if (s->prim_channels + !!s->lfe > 2 &&
+ avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
+ /*
+ * Neither the core's auxiliary data nor our default tables contain
+ * downmix coefficients for the additional channel coded in the XCh
+ * extension, so when we're doing a Stereo downmix, don't decode it.
+ */
+ s->xch_disable = 1;
+ }
+
#if FF_API_REQUEST_CHANNELS
FF_DISABLE_DEPRECATION_WARNINGS
if (s->xch_present && !s->xch_disable &&
@@ -1886,7 +1896,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
return AVERROR_INVALIDDATA;
- if (s->prim_channels + !!s->lfe > 2 &&
+ if (num_core_channels + !!s->lfe > 2 &&
avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
channels = 2;
s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
@@ -1900,7 +1910,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
s->core_downmix_amode == DCA_STEREO_TOTAL)) {
int sign, code;
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1;
code = s->core_downmix_codes[i][0] & 0x0FF;
s->downmix_coef[i][0] = (!code ? 0.0f :
@@ -1918,19 +1928,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
"Invalid channel mode %d\n", am);
return AVERROR_INVALIDDATA;
}
- if (s->prim_channels + !!s->lfe >
+ if (num_core_channels + !!s->lfe >
FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
avpriv_request_sample(s->avctx, "Downmixing %d channels",
s->prim_channels + !!s->lfe);
return AVERROR_PATCHWELCOME;
}
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
}
}
av_dlog(s->avctx, "Stereo downmix coeffs:\n");
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
av_dlog(s->avctx, "L, input channel %d = %f\n", i,
s->downmix_coef[i][0]);
av_dlog(s->avctx, "R, input channel %d = %f\n", i,
diff --git a/deps/libav/libavcodec/pcm-dvd.c b/deps/libav/libavcodec/pcm-dvd.c
index 172e93a..0872d29 100644
--- a/deps/libav/libavcodec/pcm-dvd.c
+++ b/deps/libav/libavcodec/pcm-dvd.c
@@ -177,11 +177,11 @@ static void *pcm_dvd_decode_samples(AVCodecContext *avctx, const uint8_t *src,
dst32[2] = bytestream2_get_be16u(&gb) << 16;
dst32[3] = bytestream2_get_be16u(&gb) << 16;
t = bytestream2_get_byteu(&gb);
- *dst32 += (t & 0xf0) << 8;
- *dst32 += (t & 0x0f) << 12;
+ *dst32++ += (t & 0xf0) << 8;
+ *dst32++ += (t & 0x0f) << 12;
t = bytestream2_get_byteu(&gb);
- *dst32 += (t & 0xf0) << 8;
- *dst32 += (t & 0x0f) << 12;
+ *dst32++ += (t & 0xf0) << 8;
+ *dst32++ += (t & 0x0f) << 12;
}
} while (--blocks);
return dst32;
diff --git a/deps/libav/libavcodec/vp9.c b/deps/libav/libavcodec/vp9.c
index c04a3b8..2a6a138 100644
--- a/deps/libav/libavcodec/vp9.c
+++ b/deps/libav/libavcodec/vp9.c
@@ -1198,7 +1198,7 @@ static int vp9_decode_packet(AVCodecContext *avctx, void *frame,
const uint8_t *idx = data + size + 1 - idx_sz;
while (n_frames--) {
- int sz = AV_RL32(idx);
+ unsigned sz = AV_RL32(idx);
if (nbytes < 4)
sz &= (1 << (8 * nbytes)) - 1;
@@ -1206,7 +1206,7 @@ static int vp9_decode_packet(AVCodecContext *avctx, void *frame,
if (sz > size) {
av_log(avctx, AV_LOG_ERROR,
- "Superframe packet size too big: %d > %d\n",
+ "Superframe packet size too big: %u > %d\n",
sz, size);
return AVERROR_INVALIDDATA;
}
diff --git a/deps/libav/libavfilter/af_volume.c b/deps/libav/libavfilter/af_volume.c
index 12d496e..59223e5 100644
--- a/deps/libav/libavfilter/af_volume.c
+++ b/deps/libav/libavfilter/af_volume.c
@@ -278,6 +278,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
}
}
+ emms_c();
+
if (buf != out_buf)
av_frame_free(&buf);
diff --git a/deps/libav/libavfilter/vf_gradfun.c b/deps/libav/libavfilter/vf_gradfun.c
index 79f6790..f7c4372 100644
--- a/deps/libav/libavfilter/vf_gradfun.c
+++ b/deps/libav/libavfilter/vf_gradfun.c
@@ -118,6 +118,7 @@ static void filter(GradFunContext *ctx, uint8_t *dst, uint8_t *src, int width, i
ctx->filter_line(dst + y * dst_linesize, src + y * src_linesize, dc - r / 2, width, thresh, dither[y & 7]);
if (++y >= height) break;
}
+ emms_c();
}
static av_cold int init(AVFilterContext *ctx)
diff --git a/deps/libav/libavfilter/vf_hqdn3d.c b/deps/libav/libavfilter/vf_hqdn3d.c
index cd9f0d2..be6b761 100644
--- a/deps/libav/libavfilter/vf_hqdn3d.c
+++ b/deps/libav/libavfilter/vf_hqdn3d.c
@@ -147,6 +147,7 @@ static void denoise_depth(HQDN3DContext *s,
else
denoise_temporal(src, dst, frame_ant,
w, h, sstride, dstride, temporal, depth);
+ emms_c();
}
#define denoise(...) \
diff --git a/deps/libav/libavformat/avidec.c b/deps/libav/libavformat/avidec.c
index 6f80d21..e851f0b 100644
--- a/deps/libav/libavformat/avidec.c
+++ b/deps/libav/libavformat/avidec.c
@@ -795,7 +795,11 @@ fail:
if (!avi->index_loaded && pb->seekable)
avi_load_index(s);
avi->index_loaded = 1;
- avi->non_interleaved |= guess_ni_flag(s);
+
+ if ((ret = guess_ni_flag(s)) < 0)
+ return ret;
+
+ avi->non_interleaved |= ret;
for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i];
if (st->nb_index_entries)
@@ -1307,6 +1311,64 @@ static int avi_read_idx1(AVFormatContext *s, int size)
return 0;
}
+/* Scan the index and consider any file with streams more than
+ * 2 seconds or 64MB apart non-interleaved. */
+static int check_stream_max_drift(AVFormatContext *s)
+{
+ int64_t min_pos, pos;
+ int i;
+ int *idx = av_mallocz_array(s->nb_streams, sizeof(*idx));
+ if (!idx)
+ return AVERROR(ENOMEM);
+
+ for (min_pos = pos = 0; min_pos != INT64_MAX; pos = min_pos + 1LU) {
+ int64_t max_dts = INT64_MIN / 2;
+ int64_t min_dts = INT64_MAX / 2;
+ int64_t max_buffer = 0;
+
+ min_pos = INT64_MAX;
+
+ for (i = 0; i < s->nb_streams; i++) {
+ AVStream *st = s->streams[i];
+ AVIStream *ast = st->priv_data;
+ int n = st->nb_index_entries;
+ while (idx[i] < n && st->index_entries[idx[i]].pos < pos)
+ idx[i]++;
+ if (idx[i] < n) {
+ int64_t dts;
+ dts = av_rescale_q(st->index_entries[idx[i]].timestamp /
+ FFMAX(ast->sample_size, 1),
+ st->time_base, AV_TIME_BASE_Q);
+ min_dts = FFMIN(min_dts, dts);
+ min_pos = FFMIN(min_pos, st->index_entries[idx[i]].pos);
+ }
+ }
+ for (i = 0; i < s->nb_streams; i++) {
+ AVStream *st = s->streams[i];
+ AVIStream *ast = st->priv_data;
+
+ if (idx[i] && min_dts != INT64_MAX / 2) {
+ int64_t dts;
+ dts = av_rescale_q(st->index_entries[idx[i] - 1].timestamp /
+ FFMAX(ast->sample_size, 1),
+ st->time_base, AV_TIME_BASE_Q);
+ max_dts = FFMAX(max_dts, dts);
+ max_buffer = FFMAX(max_buffer,
+ av_rescale(dts - min_dts,
+ st->codec->bit_rate,
+ AV_TIME_BASE));
+ }
+ }
+ if (max_dts - min_dts > 2 * AV_TIME_BASE ||
+ max_buffer > 1024 * 1024 * 8 * 8) {
+ av_free(idx);
+ return 1;
+ }
+ }
+ av_free(idx);
+ return 0;
+}
+
static int guess_ni_flag(AVFormatContext *s)
{
int i;
@@ -1336,7 +1398,11 @@ static int guess_ni_flag(AVFormatContext *s)
first_end = st->index_entries[n - 1].pos;
}
avio_seek(s->pb, oldpos, SEEK_SET);
- return last_start > first_end;
+
+ if (last_start > first_end)
+ return 1;
+
+ return check_stream_max_drift(s);
}
static int avi_load_index(AVFormatContext *s)
diff --git a/deps/libav/libavformat/matroska.c b/deps/libav/libavformat/matroska.c
index 410e2f4..9628abc 100644
--- a/deps/libav/libavformat/matroska.c
+++ b/deps/libav/libavformat/matroska.c
@@ -32,6 +32,7 @@ const CodecTags ff_mkv_codec_tags[]={
{"A_MPEG/L2" , AV_CODEC_ID_MP2},
{"A_MPEG/L1" , AV_CODEC_ID_MP2},
{"A_MPEG/L3" , AV_CODEC_ID_MP3},
+ {"A_OPUS" , AV_CODEC_ID_OPUS},
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F32LE},
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F64LE},
{"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S16BE},
diff --git a/deps/libav/libavformat/matroska.h b/deps/libav/libavformat/matroska.h
index 0dbc724..667f92a 100644
--- a/deps/libav/libavformat/matroska.h
+++ b/deps/libav/libavformat/matroska.h
@@ -86,6 +86,7 @@
#define MATROSKA_ID_CODECINFOURL 0x3B4040
#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
#define MATROSKA_ID_CODECDECODEALL 0xAA
+#define MATROSKA_ID_CODECDELAY 0x56AA
#define MATROSKA_ID_TRACKNAME 0x536E
#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
diff --git a/deps/libav/libavformat/matroskadec.c b/deps/libav/libavformat/matroskadec.c
index bcd7d1a..8aae26c 100644
--- a/deps/libav/libavformat/matroskadec.c
+++ b/deps/libav/libavformat/matroskadec.c
@@ -44,6 +44,7 @@
#include "libavutil/avstring.h"
#include "libavutil/lzo.h"
#include "libavutil/dict.h"
+#include "libavutil/mathematics.h"
#if CONFIG_ZLIB
#include <zlib.h>
#endif
@@ -148,6 +149,7 @@ typedef struct {
MatroskaTrackVideo video;
MatroskaTrackAudio audio;
EbmlList encodings;
+ uint64_t codec_delay;
AVStream *stream;
int64_t end_timecode;
@@ -348,6 +350,7 @@ static EbmlSyntax matroska_track[] = {
{ MATROSKA_ID_TRACKTYPE, EBML_UINT, 0, offsetof(MatroskaTrack,type) },
{ MATROSKA_ID_CODECID, EBML_STR, 0, offsetof(MatroskaTrack,codec_id) },
{ MATROSKA_ID_CODECPRIVATE, EBML_BIN, 0, offsetof(MatroskaTrack,codec_priv) },
+ { MATROSKA_ID_CODECDELAY, EBML_UINT, 0, offsetof(MatroskaTrack, codec_delay) },
{ MATROSKA_ID_TRACKLANGUAGE, EBML_UTF8, 0, offsetof(MatroskaTrack,language), {.s="eng"} },
{ MATROSKA_ID_TRACKDEFAULTDURATION, EBML_UINT, 0, offsetof(MatroskaTrack,default_duration) },
{ MATROSKA_ID_TRACKTIMECODESCALE, EBML_FLOAT,0, offsetof(MatroskaTrack,time_scale), {.f=1.0} },
@@ -1658,6 +1661,11 @@ static int matroska_read_header(AVFormatContext *s)
track->time_scale = 1.0;
avpriv_set_pts_info(st, 64, matroska->time_scale*track->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
+ /* convert the delay from ns to the track timebase */
+ track->codec_delay = av_rescale_q(track->codec_delay,
+ (AVRational){ 1, 1000000000 },
+ st->time_base);
+
st->codec->codec_id = codec_id;
st->start_time = 0;
if (strcmp(track->language, "und"))
@@ -2190,7 +2198,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
if (cluster_time != (uint64_t)-1
&& (block_time >= 0 || cluster_time >= -block_time)) {
- timecode = cluster_time + block_time;
+ timecode = cluster_time + block_time - track->codec_delay;
if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE
&& timecode < track->end_timecode)
is_keyframe = 0; /* overlapping subtitles are not key frame */
diff --git a/deps/libav/libavformat/mp3enc.c b/deps/libav/libavformat/mp3enc.c
index 46889fc..9326258 100644
--- a/deps/libav/libavformat/mp3enc.c
+++ b/deps/libav/libavformat/mp3enc.c
@@ -119,8 +119,11 @@ static void mp3_write_xing(AVFormatContext *s)
MPADecodeHeader mpah;
int srate_idx, i, channels;
int bitrate_idx;
+ int best_bitrate_idx;
+ int best_bitrate_error = INT_MAX;
int xing_offset;
int ver = 0;
+ int lsf, bytes_needed;
if (!s->pb->seekable || !mp3->write_xing)
return;
@@ -150,21 +153,51 @@ static void mp3_write_xing(AVFormatContext *s)
return;
}
- /* 64 kbps frame, should be large enough */
- bitrate_idx = (ver == 3) ? 5 : 8;
-
/* dummy MPEG audio header */
header = 0xff << 24; // sync
header |= (0x7 << 5 | ver << 3 | 0x1 << 1 | 0x1) << 16; // sync/audio-version/layer 3/no crc*/
- header |= (bitrate_idx << 4 | srate_idx << 2) << 8;
+ header |= (srate_idx << 2) << 8;
header |= channels << 6;
+
+ lsf = !((header & (1 << 20) && header & (1 << 19)));
+
+ xing_offset = xing_offtbl[ver != 3][channels == 1];
+ bytes_needed = 4 // header
+ + xing_offset
+ + 4 // xing tag
+ + 4 // frames/size/toc flags
+ + 4 // frames
+ + 4 // size
+ + XING_TOC_SIZE; // toc
+
+ for (bitrate_idx = 1; bitrate_idx < 15; bitrate_idx++) {
+ int bit_rate = 1000 * avpriv_mpa_bitrate_tab[lsf][3 - 1][bitrate_idx];
+ int error = FFABS(bit_rate - codec->bit_rate);
+
+ if (error < best_bitrate_error){
+ best_bitrate_error = error;
+ best_bitrate_idx = bitrate_idx;
+ }
+ }
+
+ for (bitrate_idx = best_bitrate_idx; bitrate_idx < 15; bitrate_idx++) {
+ int32_t mask = bitrate_idx << (4 + 8);
+ header |= mask;
+
+ avpriv_mpegaudio_decode_header(&mpah, header);
+
+ if (bytes_needed <= mpah.frame_size)
+ break;
+
+ header &= ~mask;
+ }
+
avio_wb32(s->pb, header);
avpriv_mpegaudio_decode_header(&mpah, header);
av_assert0(mpah.frame_size >= XING_MAX_SIZE);
- xing_offset = xing_offtbl[ver != 3][codec->channels == 1];
ffio_fill(s->pb, 0, xing_offset);
mp3->xing_offset = avio_tell(s->pb);
ffio_wfourcc(s->pb, "Xing");
@@ -180,8 +213,7 @@ static void mp3_write_xing(AVFormatContext *s)
for (i = 0; i < XING_TOC_SIZE; i++)
avio_w8(s->pb, 255 * i / XING_TOC_SIZE);
- mpah.frame_size -= 4 + xing_offset + 4 + 4 + 4 + 4 + XING_TOC_SIZE;
- ffio_fill(s->pb, 0, mpah.frame_size);
+ ffio_fill(s->pb, 0, mpah.frame_size - bytes_needed);
}
/*
diff --git a/deps/libav/libavformat/rtmpproto.c b/deps/libav/libavformat/rtmpproto.c
index 51381a4..ead5ccd 100644
--- a/deps/libav/libavformat/rtmpproto.c
+++ b/deps/libav/libavformat/rtmpproto.c
@@ -2483,10 +2483,10 @@ reconnect:
fname = strchr(p + 1, '/');
if (!fname || (c && c < fname)) {
fname = p + 1;
- av_strlcpy(rt->app, path + 1, p - path);
+ av_strlcpy(rt->app, path + 1, FFMIN(p - path, APP_MAX_LENGTH));
} else {
fname++;
- av_strlcpy(rt->app, path + 1, fname - path - 1);
+ av_strlcpy(rt->app, path + 1, FFMIN(fname - path - 1, APP_MAX_LENGTH));
}
}
}
@@ -2555,7 +2555,7 @@ reconnect:
if ((ret = gen_connect(s, rt)) < 0)
goto fail;
} else {
- if (read_connect(s, s->priv_data) < 0)
+ if ((ret = read_connect(s, s->priv_data)) < 0)
goto fail;
}
diff --git a/deps/libav/libavresample/utils.c b/deps/libav/libavresample/utils.c
index 2dd3d06..bc295d6 100644
--- a/deps/libav/libavresample/utils.c
+++ b/deps/libav/libavresample/utils.c
@@ -184,7 +184,7 @@ int avresample_open(AVAudioResampleContext *avr)
}
if (avr->resample_needed) {
avr->resample_out_buffer = ff_audio_data_alloc(avr->out_channels,
- 0, avr->internal_sample_fmt,
+ 1024, avr->internal_sample_fmt,
"resample_out_buffer");
if (!avr->resample_out_buffer) {
ret = AVERROR(EINVAL);
diff --git a/deps/libav/libswscale/utils.c b/deps/libav/libswscale/utils.c
index 2111fc2..ea5f368 100644
--- a/deps/libav/libswscale/utils.c
+++ b/deps/libav/libswscale/utils.c
@@ -326,7 +326,7 @@ static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos,
xDstInSrc = xInc - 0x10000;
for (i = 0; i < dstW; i++) {
- int xx = (xDstInSrc - ((filterSize - 2) << 16)) / (1 << 17);
+ int xx = (xDstInSrc - ((int64_t)(filterSize - 2) << 16)) / (1 << 17);
int j;
(*filterPos)[i] = xx;
for (j = 0; j < filterSize; j++) {
--
libgroove packaging
More information about the pkg-multimedia-commits
mailing list