diff options
author | Clément Bœsch <u@pkh.me> | 2014-09-20 18:39:58 +0200 |
---|---|---|
committer | Clément Bœsch <u@pkh.me> | 2014-09-21 18:55:12 +0200 |
commit | 08e2b0da2ca9b03630c38a878ce66d32301a9825 (patch) | |
tree | 701c2a2be66f34e93830f9378052a151969f3aef /libavformat/assenc.c | |
parent | e60770679b5605e5af556d48aabd3789f63d2c96 (diff) | |
download | ffmpeg-08e2b0da2ca9b03630c38a878ce66d32301a9825.tar.gz |
avformat/assenc: mux all extradata at once
Before this commit, the code was muxing up to the 2nd line after
"[Events]" (assuming it to be the "Format:" line). The remaining are
generally "Comment:" directives which can stay in that place. mkvextract
behaves that way so it seems there is no reason for that extra
complexity.
Diffstat (limited to 'libavformat/assenc.c')
-rw-r--r-- | libavformat/assenc.c | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/libavformat/assenc.c b/libavformat/assenc.c index 24833d2929..13af86e8cf 100644 --- a/libavformat/assenc.c +++ b/libavformat/assenc.c @@ -30,7 +30,6 @@ typedef struct DialogueLine { } DialogueLine; typedef struct ASSContext{ - unsigned int extra_index; int write_ts; // 0: ssa (timing in payload), 1: ass (matroska like) int expected_readorder; DialogueLine *dialogue_cache; @@ -42,7 +41,6 @@ static int write_header(AVFormatContext *s) { ASSContext *ass = s->priv_data; AVCodecContext *avctx= s->streams[0]->codec; - uint8_t *last= NULL; if (s->nb_streams != 1 || (avctx->codec_id != AV_CODEC_ID_SSA && avctx->codec_id != AV_CODEC_ID_ASS)) { @@ -51,21 +49,11 @@ static int write_header(AVFormatContext *s) } ass->write_ts = avctx->codec_id == AV_CODEC_ID_ASS; avpriv_set_pts_info(s->streams[0], 64, 1, 100); - - while(ass->extra_index < avctx->extradata_size){ - uint8_t *p = avctx->extradata + ass->extra_index; - uint8_t *end= strchr(p, '\n'); - if(!end) end= avctx->extradata + avctx->extradata_size; - else end++; - - avio_write(s->pb, p, end-p); - ass->extra_index += end-p; - - if(last && !memcmp(last, "[Events]", 8)) - break; - last=p; + if (avctx->extradata_size > 0) { + avio_write(s->pb, avctx->extradata, avctx->extradata_size); + if (avctx->extradata[avctx->extradata_size - 1] != '\n') + avio_write(s->pb, "\r\n", 2); } - avio_flush(s->pb); return 0; @@ -191,13 +179,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) static int write_trailer(AVFormatContext *s) { - ASSContext *ass = s->priv_data; - AVCodecContext *avctx= s->streams[0]->codec; - purge_dialogues(s, 1); - avio_write(s->pb, avctx->extradata + ass->extra_index, - avctx->extradata_size - ass->extra_index); - return 0; } |