Andreas Rheinhardt: > Andreas Rheinhardt: >> An AVStream's codecpar is supposed to be filled by the caller before >> avformat_write_header(); if the CodecParameters change, the caller >> should signal this via packet side data, but not touch the AVStream's >> codecpar. >> >> The FLAC muxer checks for packet side data containing updated extradata, >> yet if nothing has arrived by the time the trailer is written, the >> already written extradata is overwritten by the very same extradata >> again, unless the output is unseekable, in which case a warning that the >> FLAC header can't be rewritten is emitted. >> >> This commit changes this by only trying to rewrite the extradata if a >> new streaminfo arrived via packet side data. Only then is a warning >> emitted in case the output is unseekable. >> >> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> >> --- >> libavformat/flacenc.c | 6 ++---- >> 1 file changed, 2 insertions(+), 4 deletions(-) >> >> diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c >> index 1aae0c97e0..42c1efec54 100644 >> --- a/libavformat/flacenc.c >> +++ b/libavformat/flacenc.c >> @@ -331,8 +331,6 @@ static int flac_write_trailer(struct AVFormatContext *s) >> AVIOContext *pb = s->pb; >> int64_t file_size; >> FlacMuxerContext *c = s->priv_data; >> - uint8_t *streaminfo = c->streaminfo ? c->streaminfo : >> - >> s->streams[c->audio_stream_idx]->codecpar->extradata; >> >> if (c->waiting_pics) { >> av_log(s, AV_LOG_WARNING, "No packets were sent for some of the " >> @@ -340,14 +338,14 @@ static int flac_write_trailer(struct AVFormatContext >> *s) >> flac_queue_flush(s); >> } >> >> - if (!c->write_header || !streaminfo) >> + if (!c->write_header || !c->streaminfo) >> return 0; >> >> if (pb->seekable & AVIO_SEEKABLE_NORMAL) { >> /* rewrite the STREAMINFO header block data */ >> file_size = avio_tell(pb); >> avio_seek(pb, 8, SEEK_SET); >> - avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE); >> + avio_write(pb, c->streaminfo, FLAC_STREAMINFO_SIZE); >> avio_seek(pb, file_size, SEEK_SET); >> } else { >> av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); >> > Will apply this tomorrow if there are no objections. > > - Andreas > Applied.
- Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".