lavf/segment: fix autobsf
This commit is contained in:
		
							parent
							
								
									5a51ca2da7
								
							
						
					
					
						commit
						8e6478b723
					
				@ -798,9 +798,26 @@ static int seg_write_header(AVFormatContext *s)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    SegmentContext *seg = s->priv_data;
 | 
					    SegmentContext *seg = s->priv_data;
 | 
				
			||||||
    AVFormatContext *oc = seg->avf;
 | 
					    AVFormatContext *oc = seg->avf;
 | 
				
			||||||
    int ret;
 | 
					    int ret, i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!seg->header_written) {
 | 
					    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);
 | 
					        ret = avformat_write_header(oc, NULL);
 | 
				
			||||||
        if (ret < 0)
 | 
					        if (ret < 0)
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
@ -978,6 +995,25 @@ fail:
 | 
				
			|||||||
    return ret;
 | 
					    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 OFFSET(x) offsetof(SegmentContext, x)
 | 
				
			||||||
#define E AV_OPT_FLAG_ENCODING_PARAM
 | 
					#define E AV_OPT_FLAG_ENCODING_PARAM
 | 
				
			||||||
static const AVOption options[] = {
 | 
					static const AVOption options[] = {
 | 
				
			||||||
@ -1041,6 +1077,7 @@ AVOutputFormat ff_segment_muxer = {
 | 
				
			|||||||
    .write_packet   = seg_write_packet,
 | 
					    .write_packet   = seg_write_packet,
 | 
				
			||||||
    .write_trailer  = seg_write_trailer,
 | 
					    .write_trailer  = seg_write_trailer,
 | 
				
			||||||
    .deinit         = seg_free,
 | 
					    .deinit         = seg_free,
 | 
				
			||||||
 | 
					    .check_bitstream = seg_check_bitstream,
 | 
				
			||||||
    .priv_class     = &seg_class,
 | 
					    .priv_class     = &seg_class,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1061,5 +1098,6 @@ AVOutputFormat ff_stream_segment_muxer = {
 | 
				
			|||||||
    .write_packet   = seg_write_packet,
 | 
					    .write_packet   = seg_write_packet,
 | 
				
			||||||
    .write_trailer  = seg_write_trailer,
 | 
					    .write_trailer  = seg_write_trailer,
 | 
				
			||||||
    .deinit         = seg_free,
 | 
					    .deinit         = seg_free,
 | 
				
			||||||
 | 
					    .check_bitstream = seg_check_bitstream,
 | 
				
			||||||
    .priv_class     = &sseg_class,
 | 
					    .priv_class     = &sseg_class,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user