X-Git-Url: https://git.piment-noir.org/?p=deb_ffmpeg.git;a=blobdiff_plain;f=ffmpeg%2Flibavformat%2Fsegment.c;fp=ffmpeg%2Flibavformat%2Fsegment.c;h=2cad6e3dab720df02bd6892b9a4e6de6d51cacf7;hp=f35bbef8dcbdb04800924c2c58167f0e7ae656d6;hb=f6fa7814ccfe3e76514b36cf04f5cd3cb657c8cf;hpb=2ba45a602cbfa7b771effba9b11bb4245c21bc00 diff --git a/ffmpeg/libavformat/segment.c b/ffmpeg/libavformat/segment.c index f35bbef..2cad6e3 100644 --- a/ffmpeg/libavformat/segment.c +++ b/ffmpeg/libavformat/segment.c @@ -39,6 +39,7 @@ #include "libavutil/parseutils.h" #include "libavutil/mathematics.h" #include "libavutil/time.h" +#include "libavutil/time_internal.h" #include "libavutil/timestamp.h" typedef struct SegmentListEntry { @@ -143,6 +144,7 @@ static int segment_mux_init(AVFormatContext *s) oc = seg->avf; oc->interrupt_callback = s->interrupt_callback; + oc->max_delay = s->max_delay; av_dict_copy(&oc->metadata, s->metadata, 0); for (i = 0; i < s->nb_streams; i++) { @@ -162,6 +164,7 @@ static int segment_mux_init(AVFormatContext *s) ocodec->codec_tag = 0; } st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio; + st->time_base = s->streams[i]->time_base; av_dict_copy(&st->metadata, s->streams[i]->metadata, 0); } @@ -567,6 +570,7 @@ static int seg_write_header(AVFormatContext *s) AVFormatContext *oc = NULL; AVDictionary *options = NULL; int ret; + int i; seg->segment_count = 0; if (!seg->write_header_trailer) @@ -672,6 +676,13 @@ static int seg_write_header(AVFormatContext *s) } seg->segment_frame_count = 0; + av_assert0(s->nb_streams == oc->nb_streams); + for (i = 0; i < s->nb_streams; i++) { + AVStream *inner_st = oc->streams[i]; + AVStream *outer_st = s->streams[i]; + avpriv_set_pts_info(outer_st, inner_st->pts_wrap_bits, inner_st->time_base.num, inner_st->time_base.den); + } + if (oc->avoid_negative_ts > 0 && s->avoid_negative_ts < 0) s->avoid_negative_ts = 1; @@ -714,11 +725,7 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt) if (seg->use_clocktime) { int64_t avgt = av_gettime(); time_t sec = avgt / 1000000; -#if HAVE_LOCALTIME_R localtime_r(&sec, &ti); -#else - ti = *localtime(&sec); -#endif usecs = (int64_t)(ti.tm_hour*3600 + ti.tm_min*60 + ti.tm_sec) * 1000000 + (avgt % 1000000); wrapped_val = usecs % seg->time; if (seg->last_cut != usecs && wrapped_val < seg->last_val) {