avcodec/mpegaudio_parser: Discard ID3v1 tag at the end
Ideally this should be discarded by the demuxer but this is not possible without fully parsing which would be then very similar to this. The current ID3v1 discard code in the demuxer does not work and will be removed in a subsequent commit The discard code could be adjusted if needed to also discard tags at other locations than the end or to limit this possibly to input from the mp3 demuxer or even to move the discarding to the decoder. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
#include "parser.h"
|
||||
#include "mpegaudiodecheader.h"
|
||||
#include "libavutil/common.h"
|
||||
|
||||
#include "libavformat/id3v1.h" // for ID3v1_TAG_SIZE
|
||||
|
||||
typedef struct MpegAudioParseContext {
|
||||
ParseContext pc;
|
||||
@@ -49,6 +49,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
|
||||
uint32_t state= pc->state;
|
||||
int i;
|
||||
int next= END_NOT_FOUND;
|
||||
int flush = !buf_size;
|
||||
|
||||
for(i=0; i<buf_size; ){
|
||||
if(s->frame_size){
|
||||
@@ -113,6 +114,12 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
if (flush && buf_size >= ID3v1_TAG_SIZE && memcmp(buf, "TAG", 3) == 0) {
|
||||
*poutbuf = NULL;
|
||||
*poutbuf_size = 0;
|
||||
return next;
|
||||
}
|
||||
|
||||
*poutbuf = buf;
|
||||
*poutbuf_size = buf_size;
|
||||
return next;
|
||||
|
Reference in New Issue
Block a user