[FFmpeg-devel] [PATCH] Make AAC in Ogg (ogm) work.
Michael Niedermayer
michaelni at gmx.at
Fri Feb 17 22:02:32 CET 2012
On Fri, Feb 17, 2012 at 08:42:39PM +0100, Reimar Döffinger wrote:
> This needs the extradata to be extracted.
> The approach used is the one MPlayer uses, though it is
> unclear whether the 4 bytes extradata that are skipped
> should be skipped always or only for AAC.
> The AAC parser must be disabled, too, otherwise playback
> still does not work.
> Fixes trac issue #547.
>
> Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
> ---
> libavformat/oggparseogm.c | 19 ++++++++++++++++---
> 1 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c
> index 0a8a7c6..a7e5aaa 100644
> --- a/libavformat/oggparseogm.c
> +++ b/libavformat/oggparseogm.c
> @@ -40,6 +40,7 @@ ogm_header(AVFormatContext *s, int idx)
> const uint8_t *p = os->buf + os->pstart;
> uint64_t time_unit;
> uint64_t spu;
> + uint32_t size;
>
> if(!(*p & 1))
> return 0;
> @@ -67,11 +68,13 @@ ogm_header(AVFormatContext *s, int idx)
> acid[4] = 0;
> cid = strtol(acid, NULL, 16);
> st->codec->codec_id = ff_codec_get_id(ff_codec_wav_tags, cid);
> - st->need_parsing = AVSTREAM_PARSE_FULL;
> + // our parser completely breaks AAC in Ogg
> + if (st->codec->codec_id != CODEC_ID_AAC)
> + st->need_parsing = AVSTREAM_PARSE_FULL;
> }
>
> - p += 4; /* useless size field */
> -
> + size = bytestream_get_le32(&p);
> + size = FFMIN(size, os->psize);
> time_unit = bytestream_get_le64(&p);
> spu = bytestream_get_le64(&p);
> p += 4; /* default_len */
> @@ -89,6 +92,16 @@ ogm_header(AVFormatContext *s, int idx)
> st->codec->bit_rate = bytestream_get_le32(&p) * 8;
> st->codec->sample_rate = spu * 10000000 / time_unit;
> avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
> + if (size >= 56 && st->codec->codec_id == CODEC_ID_AAC) {
> + p += 4;
> + size -= 4;
> + }
> + if (size > 52) {
> + size -= 52;
> + st->codec->extradata_size = size;
> + st->codec->extradata = av_malloc(size);
this probably should have padding added
otherwise, LGTM
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
DNS cache poisoning attacks, popular search engine, Google internet authority
dont be evil, please
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120217/73d88dbc/attachment.asc>
More information about the ffmpeg-devel
mailing list