2016-10-27 15:01 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: > > > 2016-10-27 14:52 GMT+08:00 Rodger Combs <rodger.co...@gmail.com>: > >> >> > On Oct 27, 2016, at 01:41, Steven Liu <lingjiujia...@gmail.com> wrote: >> > >> > 2016-10-27 14:16 GMT+08:00 Rodger Combs <rodger.co...@gmail.com>: >> > >> >> --- >> >> libavformat/segment.c | 40 +++++++++++++++++++++++++++++++++++++++- >> >> 1 file changed, 39 insertions(+), 1 deletion(-) >> >> >> >> diff --git a/libavformat/segment.c b/libavformat/segment.c >> >> index 868f0a8..9b3dc17 100644 >> >> --- a/libavformat/segment.c >> >> +++ b/libavformat/segment.c >> >> @@ -798,9 +798,26 @@ static int seg_write_header(AVFormatContext *s) >> >> { >> >> SegmentContext *seg = s->priv_data; >> >> AVFormatContext *oc = seg->avf; >> >> - int ret; >> >> + int ret, i; >> >> >> >> if (!seg->header_written) { >> >> + for (i = 0; i < s->nb_streams; i++) { >> >> + AVStream *st = oc->streams[i]; >> >> + AVCodecParameters *ipar, *opar; >> >> + >> >> + ipar = s->streams[i]->codecpar; >> >> + opar = oc->streams[i]->codecpar; >> >> + avcodec_parameters_copy(opar, ipar); >> >> + if (!oc->oformat->codec_tag || >> >> + av_codec_get_id (oc->oformat->codec_tag, >> ipar->codec_tag) >> >> == opar->codec_id || >> >> + av_codec_get_tag(oc->oformat->codec_tag, >> ipar->codec_id) >> >> <= 0) { >> >> + opar->codec_tag = ipar->codec_tag; >> >> + } else { >> >> + opar->codec_tag = 0; >> >> + } >> >> + st->sample_aspect_ratio = s->streams[i]->sample_aspect_r >> atio; >> >> + st->time_base = s->streams[i]->time_base; >> >> + } >> >> ret = avformat_write_header(oc, NULL); >> >> if (ret < 0) >> >> return ret; >> >> @@ -978,6 +995,25 @@ fail: >> >> return ret; >> >> } >> >> >> >> +static int seg_check_bitstream(struct AVFormatContext *s, const >> AVPacket >> >> *pkt) >> >> +{ >> >> + SegmentContext *seg = s->priv_data; >> >> + AVFormatContext *oc = seg->avf; >> >> + if (oc->oformat->check_bitstream) { >> >> + int ret = oc->oformat->check_bitstream(oc, pkt); >> >> + if (ret == 1) { >> >> + AVStream *st = s->streams[pkt->stream_index]; >> >> + AVStream *ost = oc->streams[pkt->stream_index]; >> >> + st->internal->bsfcs = ost->internal->bsfcs; >> >> + st->internal->nb_bsfcs = ost->internal->nb_bsfcs; >> >> + ost->internal->bsfcs = NULL; >> >> + ost->internal->nb_bsfcs = 0; >> >> + } >> >> + return ret; >> >> + } >> >> + return 1; >> >> +} >> >> + >> >> #define OFFSET(x) offsetof(SegmentContext, x) >> >> #define E AV_OPT_FLAG_ENCODING_PARAM >> >> static const AVOption options[] = { >> >> @@ -1041,6 +1077,7 @@ AVOutputFormat ff_segment_muxer = { >> >> .write_packet = seg_write_packet, >> >> .write_trailer = seg_write_trailer, >> >> .deinit = seg_free, >> >> + .check_bitstream = seg_check_bitstream, >> >> .priv_class = &seg_class, >> >> }; >> >> >> >> @@ -1061,5 +1098,6 @@ AVOutputFormat ff_stream_segment_muxer = { >> >> .write_packet = seg_write_packet, >> >> .write_trailer = seg_write_trailer, >> >> .deinit = seg_free, >> >> + .check_bitstream = seg_check_bitstream, >> >> .priv_class = &sseg_class, >> >> }; >> >> -- >> >> 2.10.0 >> >> >> >> _______________________________________________ >> >> ffmpeg-devel mailing list >> >> ffmpeg-devel@ffmpeg.org >> >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > >> > >> > This is move to usual area by Michael >> > you can refer to commit id: e29d2d9c92e19b0caf05a2064d132ccdecdfc3d5 >> > and >> > de9674c5eacc076894bd0f94bee0001ba6ab8344 >> >> See 45f5c5573203a48acb2dd6fbf18f4b0c25b7aff0 (which accidentally breaks >> autobsf for segment [patch was written before e29d2d9c92e19b0caf05a2064d132c >> cdecdfc3d5]). >> This is necessary for the separate-header-file functionality to work. >> > refer to http://ffmpeg.org/pipermail/ffmpeg-devel/2016-June/196016.html > >> >> > _______________________________________________ >> > ffmpeg-devel mailing list >> > ffmpeg-devel@ffmpeg.org >> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >
Maybe we should re-factor this BSF logic into a shareable function and make both av_write_frame and av_interleaved_write_frame use it then, instead of adding it to hlsenc (and after that even more playlist-muxers like dash, segment, etc) - Said by Hendrik Leppkes I think Hendrik Leppkes is right, and same here _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel