[FFmpeg-devel] [PATCH] avformat/assenc: mux all extradata at once
wm4
nfxjfg at googlemail.com
Sun Sep 21 08:28:49 CEST 2014
On Sat, 20 Sep 2014 18:40:57 +0200
Clément Bœsch <u at pkh.me> wrote:
> Before this commit, the code was muxing up to the 2nd line after
> "[Event]" (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.
> ---
> libavformat/assenc.c | 24 +-----------------------
> 1 file changed, 1 insertion(+), 23 deletions(-)
>
> diff --git a/libavformat/assenc.c b/libavformat/assenc.c
> index 2afeef7..96fdb22 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,7 @@ 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;
> - }
> -
> + avio_write(s->pb, avctx->extradata, avctx->extradata_size);
> avio_flush(s->pb);
>
> return 0;
> @@ -191,13 +175,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;
> }
>
LGTM
More information about the ffmpeg-devel
mailing list