r12894 - in trunk/libavcodec: aac_ac3_parser.c aac_ac3_parser.h aac_parser.c ac3_parser.c
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894 Log: Change aac and ac3 parsers to use ff_combine_frame(). Modified: trunk/libavcodec/aac_ac3_parser.c trunk/libavcodec/aac_ac3_parser.h trunk/libavcodec/aac_parser.c trunk/libavcodec/ac3_parser.c Modified: trunk/libavcodec/aac_ac3_parser.c ============================================================================== --- trunk/libavcodec/aac_ac3_parser.c (original) +++ trunk/libavcodec/aac_ac3_parser.c Sat Apr 19 03:50:40 2008 @@ -29,34 +29,40 @@ int ff_aac_ac3_parse(AVCodecParserContex const uint8_t *buf, int buf_size) { AACAC3ParseContext *s = s1->priv_data; - const uint8_t *buf_ptr; - int len; + ParseContext *pc = &s->pc; + int len, i; - *poutbuf = NULL; - *poutbuf_size = 0; + i=END_NOT_FOUND; + if(s->remaining_size <= buf_size){ + if(s->remaining_size){ + i= s->remaining_size; + s->remaining_size = 0; + }else{ //we need a header first + len=0; + for(i=s->remaining_size; i<buf_size; i++){ + s->state = (s->state<<8) + buf[i]; + if((len=s->sync(s->state, s))) + break; + } + if(len<=0){ + i=END_NOT_FOUND; + }else{ + i-= s->header_size -1; + s->remaining_size = len + i; + } + } + } - buf_ptr = buf; - while (buf_size > 0) { - int size_needed= s->frame_size ? s->frame_size : s->header_size; - len = s->inbuf_ptr - s->inbuf; + if(ff_combine_frame(pc, i, &buf, &buf_size)<0){ + s->remaining_size -= FFMIN(s->remaining_size, buf_size); + *poutbuf = NULL; + *poutbuf_size = 0; + return buf_size; + } - if(len<size_needed){ - len = FFMIN(size_needed - len, buf_size); - memcpy(s->inbuf_ptr, buf_ptr, len); - buf_ptr += len; - s->inbuf_ptr += len; - buf_size -= len; - } + *poutbuf = buf; + *poutbuf_size = buf_size; - if (s->frame_size == 0) { - if ((s->inbuf_ptr - s->inbuf) == s->header_size) { - len = s->sync(s); - if (len == 0) { - /* no sync found : move by one byte (inefficient, but simple!) */ - memmove(s->inbuf, s->inbuf + 1, s->header_size - 1); - s->inbuf_ptr--; - } else { - s->frame_size = len; /* update codec info */ avctx->sample_rate = s->sample_rate; /* allow downmixing to stereo (or mono for AC3) */ @@ -71,17 +77,6 @@ int ff_aac_ac3_parse(AVCodecParserContex } avctx->bit_rate = s->bit_rate; avctx->frame_size = s->samples; - } - } - } else { - if(s->inbuf_ptr - s->inbuf == s->frame_size){ - *poutbuf = s->inbuf; - *poutbuf_size = s->frame_size; - s->inbuf_ptr = s->inbuf; - s->frame_size = 0; - break; - } - } - } - return buf_ptr - buf; + + return i; } Modified: trunk/libavcodec/aac_ac3_parser.h ============================================================================== --- trunk/libavcodec/aac_ac3_parser.h (original) +++ trunk/libavcodec/aac_ac3_parser.h Sat Apr 19 03:50:40 2008 @@ -27,16 +27,18 @@ #include "avcodec.h" typedef struct AACAC3ParseContext { - uint8_t *inbuf_ptr; int frame_size; int header_size; - int (*sync)(struct AACAC3ParseContext *hdr_info); - uint8_t inbuf[8192]; /* input buffer */ + int (*sync)(uint64_t state, struct AACAC3ParseContext *hdr_info); int channels; int sample_rate; int bit_rate; int samples; + + ParseContext pc; + int remaining_size; + uint64_t state; } AACAC3ParseContext; int ff_aac_ac3_parse(AVCodecParserContext *s1, Modified: trunk/libavcodec/aac_parser.c ============================================================================== --- trunk/libavcodec/aac_parser.c (original) +++ trunk/libavcodec/aac_parser.c Sat Apr 19 03:50:40 2008 @@ -27,12 +27,13 @@ #define AAC_HEADER_SIZE 7 -static int aac_sync(AACAC3ParseContext *hdr_info) +static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info) { GetBitContext bits; int size, rdb, ch, sr; + uint64_t tmp = be2me_64(state); - init_get_bits(&bits, hdr_info->inbuf, AAC_HEADER_SIZE * 8); + init_get_bits(&bits, ((uint8_t *)&tmp)+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8); if(get_bits(&bits, 12) != 0xfff) return 0; @@ -72,7 +73,6 @@ static int aac_sync(AACAC3ParseContext * static av_cold int aac_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; - s->inbuf_ptr = s->inbuf; s->header_size = AAC_HEADER_SIZE; s->sync = aac_sync; return 0; Modified: trunk/libavcodec/ac3_parser.c ============================================================================== --- trunk/libavcodec/ac3_parser.c (original) +++ trunk/libavcodec/ac3_parser.c Sat Apr 19 03:50:40 2008 @@ -123,12 +123,13 @@ int ff_ac3_parse_header(const uint8_t bu return 0; } -static int ac3_sync(AACAC3ParseContext *hdr_info) +static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info) { int err; + uint64_t tmp = be2me_64(state); AC3HeaderInfo hdr; - err = ff_ac3_parse_header(hdr_info->inbuf, &hdr); + err = ff_ac3_parse_header(((uint8_t *)&tmp)+8-AC3_HEADER_SIZE, &hdr); if(err < 0) return 0; @@ -144,7 +145,6 @@ static int ac3_sync(AACAC3ParseContext * static av_cold int ac3_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; - s->inbuf_ptr = s->inbuf; s->header_size = AC3_HEADER_SIZE; s->sync = ac3_sync; return 0;
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
this breaks parsing of some AC3 streams. For example ac3_parsing_errors_rev12894.mpg in incoming. I'm not sure if this is the actual changeset which is to blame. It is the first which introduces "frame sync error" and "incomplete frame" messages. But those are only at the start of the file while the beeps with current trunk are later in the file. Playback of that sample is broken from 13579 til 13653. Revision 13654 fixes playback but introduces nasty beeps after each frame sync error. Janne ffplay output of rev 12894 janne at tjalk ffmpeg.git % ./ffplay ac3_parsing_errors_rev12894.mpg FFplay version git-968e7dc, Copyright (c) 2003-2008 Fabrice Bellard, et al. configuration: --cpu=k8 --enable-gpl --cc=ccache gcc libavutil version: 49.6.0 libavcodec version: 51.55.0 libavformat version: 52.13.0 libavdevice version: 52.0.0 built on Sep 19 2008 15:40:06, gcc: 4.2.3 (Gentoo 4.2.3 p1.0) [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error [ac3 @ 0x7c12e0]incomplete frame [ac3 @ 0x7c12e0]frame sync error
On Friday 19 September 2008 15:50:21 Janne Grunau wrote: output of current trunk: janne at tjalk ffmpeg.git % ./ffplay ac3_parsing_errors_rev12894.mpg FFplay version git-968e7dc, Copyright (c) 2003-2008 Fabrice Bellard, et al. configuration: --cpu=k8 --enable-gpl --cc=ccache gcc libavutil 49.10. 0 / 49.10. 0 libavcodec 52. 0. 0 / 52. 0. 0 libavformat 52.22. 1 / 52.22. 1 libavdevice 52. 1. 0 / 52. 1. 0 built on Sep 19 2008 15:54:29, gcc: 4.2.3 (Gentoo 4.2.3 p1.0) [ac3 @ 0xdb5eb0]frame sync error [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]frame CRC mismatch [ac3 @ 0xdb5eb0]frame CRC mismatch [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size [ac3 @ 0xdb5eb0]incomplete frame [ac3 @ 0xdb5eb0]invalid frame size
Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
this breaks parsing of some AC3 streams. For example ac3_parsing_errors_rev12894.mpg in incoming.
I'm not sure if this is the actual changeset which is to blame. It is the first which introduces "frame sync error" and "incomplete frame" messages. But those are only at the start of the file while the beeps with current trunk are later in the file.
Playback of that sample is broken from 13579 til 13653. Revision 13654 fixes playback but introduces nasty beeps after each frame sync error.
Janne
I am aware of the issue, and I'm pretty sure I know what's causing it, but I'm not quite sure how to fix it. It seems to be occuring when the first bytes of a frame header are at the end of the buffer. The next parser call then has the start of frame as negative, which doesn't seem to work well with ff_combine_frame(). There was a patch which fixed the error messages, but didn't fix the problem because the 2 frames end up being sent in the same packet. -Justin
On Fri, Sep 19, 2008 at 06:20:30PM -0400, Justin Ruggles wrote:
Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
this breaks parsing of some AC3 streams. For example ac3_parsing_errors_rev12894.mpg in incoming.
I'm not sure if this is the actual changeset which is to blame. It is the first which introduces "frame sync error" and "incomplete frame" messages. But those are only at the start of the file while the beeps with current trunk are later in the file.
Playback of that sample is broken from 13579 til 13653. Revision 13654 fixes playback but introduces nasty beeps after each frame sync error.
Janne
I am aware of the issue, and I'm pretty sure I know what's causing it, but I'm not quite sure how to fix it. It seems to be occuring when the first bytes of a frame header are at the end of the buffer. The next parser call then has the start of frame as negative, which doesn't seem to work well with ff_combine_frame(). There was a patch which fixed the error messages, but didn't fix the problem because the 2 frames end up being sent in the same packet.
Does the following fix it? [if not i need a testcase that fails with it] @@ -51,7 +56,7 @@ }else{ i-= s->header_size -1; s->remaining_size = len; - if(!new_frame_start){ + if(!new_frame_start || pc->index+i<=0){ s->remaining_size += i; goto get_next; } [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The worst form of inequality is to try to make unequal things equal. -- Aristotle
Michael Niedermayer wrote:
On Fri, Sep 19, 2008 at 06:20:30PM -0400, Justin Ruggles wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
On Saturday 19 April 2008 03:50:41 michael wrote: this breaks parsing of some AC3 streams. For example ac3_parsing_errors_rev12894.mpg in incoming.
I'm not sure if this is the actual changeset which is to blame. It is the first which introduces "frame sync error" and "incomplete frame" messages. But those are only at the start of the file while the beeps with current trunk are later in the file.
Playback of that sample is broken from 13579 til 13653. Revision 13654 fixes playback but introduces nasty beeps after each frame sync error.
Janne I am aware of the issue, and I'm pretty sure I know what's causing it, but I'm not quite sure how to fix it. It seems to be occuring when the first bytes of a frame header are at the end of the buffer. The next
Janne Grunau wrote: parser call then has the start of frame as negative, which doesn't seem to work well with ff_combine_frame(). There was a patch which fixed the error messages, but didn't fix the problem because the 2 frames end up being sent in the same packet.
Does the following fix it? [if not i need a testcase that fails with it]
@@ -51,7 +56,7 @@ }else{ i-= s->header_size -1; s->remaining_size = len; - if(!new_frame_start){ + if(!new_frame_start || pc->index+i<=0){ s->remaining_size += i; goto get_next; }
This fixes all the recent problems I have run into with the AC3 parser, including issue 459. Thanks! Justin
On Sun, Sep 21, 2008 at 08:36:17PM -0400, Justin Ruggles wrote:
Michael Niedermayer wrote:
On Fri, Sep 19, 2008 at 06:20:30PM -0400, Justin Ruggles wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
On Saturday 19 April 2008 03:50:41 michael wrote: this breaks parsing of some AC3 streams. For example ac3_parsing_errors_rev12894.mpg in incoming.
I'm not sure if this is the actual changeset which is to blame. It is the first which introduces "frame sync error" and "incomplete frame" messages. But those are only at the start of the file while the beeps with current trunk are later in the file.
Playback of that sample is broken from 13579 til 13653. Revision 13654 fixes playback but introduces nasty beeps after each frame sync error.
Janne I am aware of the issue, and I'm pretty sure I know what's causing it, but I'm not quite sure how to fix it. It seems to be occuring when the first bytes of a frame header are at the end of the buffer. The next
Janne Grunau wrote: parser call then has the start of frame as negative, which doesn't seem to work well with ff_combine_frame(). There was a patch which fixed the error messages, but didn't fix the problem because the 2 frames end up being sent in the same packet.
Does the following fix it? [if not i need a testcase that fails with it]
@@ -51,7 +56,7 @@ }else{ i-= s->header_size -1; s->remaining_size = len; - if(!new_frame_start){ + if(!new_frame_start || pc->index+i<=0){ s->remaining_size += i; goto get_next; }
This fixes all the recent problems I have run into with the AC3 parser, including issue 459.
applied [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Breaking DRM is a little like attempting to break through a door even though the window is wide open and the only thing in the house is a bunch of things you dont want and which you would get tomorrow for free anyway
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac. ffmpeg output appended, the svn revision in the version is wrong, might be caused by out of tree builds. Janne [janne at aniel samples_mpeg2]\$ /dev/shm/ffmpeg/12893/ffmpeg -i aac_test.mpg FFmpeg version SVN-r12659, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --enable-gpl --cpu=nocona --enable-pthreads --disable-network --disable-ffserver --enable-libfaac libavutil version: 49.6.0 libavcodec version: 51.55.0 libavformat version: 52.13.0 libavdevice version: 52.0.0 built on Oct 5 2008 22:52:04, gcc: 4.3.0 20080428 (Red Hat 4.3.0-8) Input #0, mpegts, from 'aac_test.mpg': Duration: 00:00:13.35, start: 0.000000, bitrate: 13489 kb/s Program 1 Service01 Stream #0.0[0x100]: Video: mpeg2video, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25000 kb/s, 29.97 tb(r) Stream #0.1[0x101]: Audio: mpeg4aac, 48000 Hz, 5:1, 236 kb/s Must supply at least one output file [janne at aniel samples_mpeg2]\$ /dev/shm/ffmpeg/12894/ffmpeg -i aac_test.mpg FFmpeg version SVN-r12659, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --enable-gpl --cpu=nocona --enable-pthreads --disable-network --disable-ffserver --enable-libfaac libavutil version: 49.6.0 libavcodec version: 51.55.0 libavformat version: 52.13.0 libavdevice version: 52.0.0 built on Oct 5 2008 23:02:58, gcc: 4.3.0 20080428 (Red Hat 4.3.0-8) Input #0, mpegts, from 'aac_test.mpg': Duration: N/A, start: 0.033367, bitrate: N/A Program 1 Service01 Stream #0.0[0x100]: Video: mpeg2video, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25000 kb/s, 29.97 tb(r) Stream #0.1[0x101]: Audio: mpeg4aac Must supply at least one output file
Modified: trunk/libavcodec/aac_ac3_parser.c trunk/libavcodec/aac_ac3_parser.h trunk/libavcodec/aac_parser.c trunk/libavcodec/ac3_parser.c
Modified: trunk/libavcodec/aac_ac3_parser.c ===================================================================== ========= --- trunk/libavcodec/aac_ac3_parser.c (original) +++ trunk/libavcodec/aac_ac3_parser.c Sat Apr 19 03:50:40 2008 @@ -29,34 +29,40 @@ int ff_aac_ac3_parse(AVCodecParserContex const uint8_t *buf, int buf_size) { AACAC3ParseContext *s = s1->priv_data; - const uint8_t *buf_ptr; - int len; + ParseContext *pc = &s->pc; + int len, i;
- *poutbuf = NULL; - *poutbuf_size = 0; + i=END_NOT_FOUND; + if(s->remaining_size <= buf_size){ + if(s->remaining_size){ + i= s->remaining_size; + s->remaining_size = 0; + }else{ //we need a header first + len=0; + for(i=s->remaining_size; i<buf_size; i++){ + s->state = (s->state<<8) + buf[i]; + if((len=s->sync(s->state, s))) + break; + } + if(len<=0){ + i=END_NOT_FOUND; + }else{ + i-= s->header_size -1; + s->remaining_size = len + i; + } + } + }
- buf_ptr = buf; - while (buf_size > 0) { - int size_needed= s->frame_size ? s->frame_size : s->header_size; - len = s->inbuf_ptr - s->inbuf; + if(ff_combine_frame(pc, i, &buf, &buf_size)<0){ + s->remaining_size -= FFMIN(s->remaining_size, buf_size); + *poutbuf = NULL; + *poutbuf_size = 0; + return buf_size; + }
- if(len<size_needed){ - len = FFMIN(size_needed - len, buf_size); - memcpy(s->inbuf_ptr, buf_ptr, len); - buf_ptr += len; - s->inbuf_ptr += len; - buf_size -= len; - } + *poutbuf = buf; + *poutbuf_size = buf_size;
- if (s->frame_size == 0) { - if ((s->inbuf_ptr - s->inbuf) == s->header_size) { - len = s->sync(s); - if (len == 0) { - /* no sync found : move by one byte (inefficient, but simple!) */ - memmove(s->inbuf, s->inbuf + 1, s->header_size - 1); - s->inbuf_ptr--; - } else { - s->frame_size = len; /* update codec info */ avctx->sample_rate = s->sample_rate; /* allow downmixing to stereo (or mono for AC3) */ @@ -71,17 +77,6 @@ int ff_aac_ac3_parse(AVCodecParserContex } avctx->bit_rate = s->bit_rate; avctx->frame_size = s->samples; - } - } - } else { - if(s->inbuf_ptr - s->inbuf == s->frame_size){ - *poutbuf = s->inbuf; - *poutbuf_size = s->frame_size; - s->inbuf_ptr = s->inbuf; - s->frame_size = 0; - break; - } - } - } - return buf_ptr - buf; + + return i; }
Modified: trunk/libavcodec/aac_ac3_parser.h ===================================================================== ========= --- trunk/libavcodec/aac_ac3_parser.h (original) +++ trunk/libavcodec/aac_ac3_parser.h Sat Apr 19 03:50:40 2008 @@ -27,16 +27,18 @@ #include "avcodec.h"
typedef struct AACAC3ParseContext { - uint8_t *inbuf_ptr; int frame_size; int header_size; - int (*sync)(struct AACAC3ParseContext *hdr_info); - uint8_t inbuf[8192]; /* input buffer */ + int (*sync)(uint64_t state, struct AACAC3ParseContext *hdr_info);
int channels; int sample_rate; int bit_rate; int samples; + + ParseContext pc; + int remaining_size; + uint64_t state; } AACAC3ParseContext;
int ff_aac_ac3_parse(AVCodecParserContext *s1,
Modified: trunk/libavcodec/aac_parser.c ===================================================================== ========= --- trunk/libavcodec/aac_parser.c (original) +++ trunk/libavcodec/aac_parser.c Sat Apr 19 03:50:40 2008 @@ -27,12 +27,13 @@
#define AAC_HEADER_SIZE 7
-static int aac_sync(AACAC3ParseContext *hdr_info) +static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info) { GetBitContext bits; int size, rdb, ch, sr; + uint64_t tmp = be2me_64(state);
- init_get_bits(&bits, hdr_info->inbuf, AAC_HEADER_SIZE * 8); + init_get_bits(&bits, ((uint8_t *)&tmp)+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
if(get_bits(&bits, 12) != 0xfff) return 0; @@ -72,7 +73,6 @@ static int aac_sync(AACAC3ParseContext * static av_cold int aac_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; - s->inbuf_ptr = s->inbuf; s->header_size = AAC_HEADER_SIZE; s->sync = aac_sync; return 0;
Modified: trunk/libavcodec/ac3_parser.c ===================================================================== ========= --- trunk/libavcodec/ac3_parser.c (original) +++ trunk/libavcodec/ac3_parser.c Sat Apr 19 03:50:40 2008 @@ -123,12 +123,13 @@ int ff_ac3_parse_header(const uint8_t bu return 0; }
-static int ac3_sync(AACAC3ParseContext *hdr_info) +static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info) { int err; + uint64_t tmp = be2me_64(state); AC3HeaderInfo hdr;
- err = ff_ac3_parse_header(hdr_info->inbuf, &hdr); + err = ff_ac3_parse_header(((uint8_t *)&tmp)+8-AC3_HEADER_SIZE, &hdr);
if(err < 0) return 0; @@ -144,7 +145,6 @@ static int ac3_sync(AACAC3ParseContext * static av_cold int ac3_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; - s->inbuf_ptr = s->inbuf; s->header_size = AC3_HEADER_SIZE; s->sync = ac3_sync; return 0; _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog at mplayerhq.hu https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-cvslog
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
ffmpeg output appended, the svn revision in the version is wrong, might be caused by out of tree builds.
you did confirm this issues with latest svn right? [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. -- Gandalf
On Monday 06 October 2008 13:02:45 Michael Niedermayer wrote:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
ffmpeg output appended, the svn revision in the version is wrong, might be caused by out of tree builds.
you did confirm this issues with latest svn right?
yes, of course, sorry for omitting this information. fmmpeg -i output looks still like revision 12894. Janne [janne at aniel samples_mpeg2]\$ /dev/shm/ffmpeg/15572/ffmpeg -i aac_test.mpg FFmpeg version SVN-r12659, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --enable-gpl --cpu=nocona --enable-pthreads --disable-network --disable-ffserver --enable-libfaac libavutil 49.11. 0 / 49.11. 0 libavcodec 52. 0. 0 / 52. 0. 0 libavformat 52.22. 1 / 52.22. 1 libavdevice 52. 1. 0 / 52. 1. 0 built on Oct 6 2008 13:41:28, gcc: 4.3.0 20080428 (Red Hat 4.3.0-8) Input #0, mpegts, from 'aac_test.mpg': Duration: N/A, start: 0.000000, bitrate: N/A Program 1 Service01 Stream #0.0[0x100]: Video: mpeg2video, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25000 kb/s, 29.97 tb(r) Stream #0.1[0x101]: Audio: aac, s16 Must supply at least one output file
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Democracy is the form of government in which you can choose your dictator
Michael Niedermayer <michaelni at gmx.at> writes:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work
The error in aac_parser.c is a strict aliasing violation. This patch should fix it. -- M?ns Rullg?rd mans at mansr.com
On Sat, Oct 11, 2008 at 01:40:11AM +0100, M?ns Rullg?rd wrote:
Michael Niedermayer <michaelni at gmx.at> writes:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work
The error in aac_parser.c is a strict aliasing violation. This patch should fix it.
Time to fix all those other strict aliasing violations? There are a ton of warnings about them... Diego
On Sat, Oct 11, 2008 at 01:40:11AM +0100, M?ns Rullg?rd wrote:
Michael Niedermayer <michaelni at gmx.at> writes:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work
The error in aac_parser.c is a strict aliasing violation.
For the record, making the variable volatile didnt help yesterday IIRC
This patch should fix it.
looks ok [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Freedom in capitalist society always remains about the same as it was in ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin
Michael Niedermayer <michaelni at gmx.at> writes:
On Sat, Oct 11, 2008 at 01:40:11AM +0100, M?ns Rullg?rd wrote:
Michael Niedermayer <michaelni at gmx.at> writes:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work
The error in aac_parser.c is a strict aliasing violation.
For the record, making the variable volatile didnt help yesterday IIRC
Making things volatile rarely fixes anything. Most of the times I've used have been to work around compiler bugs.
This patch should fix it.
looks ok
Applied. -- M?ns Rullg?rd mans at mansr.com
On Saturday 11 October 2008 02:40:11 M?ns Rullg?rd wrote:
Michael Niedermayer <michaelni at gmx.at> writes:
On Sun, Oct 05, 2008 at 11:19:16PM +0200, Janne Grunau wrote:
On Saturday 19 April 2008 03:50:41 michael wrote:
Author: michael Date: Sat Apr 19 03:50:40 2008 New Revision: 12894
Log: Change aac and ac3 parsers to use ff_combine_frame().
This changeset breaks also parsing of AAC in mpeg-ts. The file plays without audio. I can upload a sample but it's just generated by libfaac-enabled ffmpeg with -f mpegts -acodec libfaac.
I can not see any problem with this changeset, rather it appears that the new aac decoder does not work with aac in mpeg-ts. And that gcc miscompiles aac_parser.c somehow, i did not investigate these further but compiling aac_parser.c with -O0 and using libfaad seems to work
The error in aac_parser.c is a strict aliasing violation. This patch should fix it.
It does, thanks. Janne
participants (6)
-
diego@biurrun.de -
janne-ffmpeg@grunau.be -
justin.ruggles@gmail.com -
mans@mansr.com -
michaelni@gmx.at -
subversion@mplayerhq.hu