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_ratio; > + 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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel