Merge commit 'eb89e1b98d3676aac1287d97c633b527c1ff4ea4' into release/1.1

* commit 'eb89e1b98d3676aac1287d97c633b527c1ff4ea4':
  oggdec: add support for Opus in Ogg demuxing

Conflicts:
	libavformat/oggparseopus.c
	libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer
2014-05-04 22:47:41 +02:00

View File

@@ -48,6 +48,7 @@ static int opus_header(AVFormatContext *avf, int idx)
if (!priv)
return AVERROR(ENOMEM);
}
if (os->flags & OGG_FLAG_BOS) {
if (os->psize < OPUS_HEAD_SIZE || (AV_RL8(packet + 8) & 0xF0) != 0)
return AVERROR_INVALIDDATA;
@@ -62,6 +63,7 @@ static int opus_header(AVFormatContext *avf, int idx)
extradata = av_malloc(os->psize + FF_INPUT_BUFFER_PADDING_SIZE);
if (!extradata)
return AVERROR(ENOMEM);
memcpy(extradata, packet, os->psize);
st->codec->extradata = extradata;
st->codec->extradata_size = os->psize;
@@ -79,6 +81,7 @@ static int opus_header(AVFormatContext *avf, int idx)
priv->need_comments--;
return 1;
}
return 0;
}
@@ -93,6 +96,7 @@ static int opus_packet(AVFormatContext *avf, int idx)
if (!os->psize)
return AVERROR_INVALIDDATA;
toc = *packet;
toc_config = toc >> 3;
toc_count = toc & 3;
@@ -106,12 +110,14 @@ static int opus_packet(AVFormatContext *avf, int idx)
} else if (toc_count) {
nb_frames = 2;
}
os->pduration = frame_size * nb_frames;
if (os->lastpts != AV_NOPTS_VALUE) {
if (st->start_time == AV_NOPTS_VALUE)
st->start_time = os->lastpts;
priv->cur_dts = os->lastdts = os->lastpts -= priv->pre_skip;
}
priv->cur_dts += os->pduration;
if ((os->flags & OGG_FLAG_EOS)) {
int64_t skip = priv->cur_dts - os->granule + priv->pre_skip;
@@ -123,6 +129,7 @@ static int opus_packet(AVFormatContext *avf, int idx)
os->pduration);
}
}
return 0;
}