mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401'
* commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401': movenc: Provide output bytestream markers for fragmented content Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
This commit is contained in:
commit
4e7a921282
|
@ -4236,6 +4236,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
|||
int i, first_track = -1;
|
||||
int64_t mdat_size = 0;
|
||||
int ret;
|
||||
int has_video = 0, starts_with_key = 0, first_video_track = 1;
|
||||
|
||||
if (!(mov->flags & FF_MOV_FLAG_FRAGMENT))
|
||||
return 0;
|
||||
|
@ -4283,6 +4284,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
|||
for (i = 0; i < mov->nb_streams; i++)
|
||||
mov->tracks[i].data_offset = pos + moov_size + 8;
|
||||
|
||||
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_HEADER);
|
||||
if (mov->flags & FF_MOV_FLAG_DELAY_MOOV)
|
||||
mov_write_identification(s->pb, s);
|
||||
if ((ret = mov_write_moov_tag(s->pb, mov, s)) < 0)
|
||||
|
@ -4338,6 +4340,14 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
|||
track->data_offset = 0;
|
||||
else
|
||||
track->data_offset = mdat_size;
|
||||
if (track->par->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
has_video = 1;
|
||||
if (first_video_track) {
|
||||
if (track->entry)
|
||||
starts_with_key = track->cluster[0].flags & MOV_SYNC_SAMPLE;
|
||||
first_video_track = 0;
|
||||
}
|
||||
}
|
||||
if (!track->entry)
|
||||
continue;
|
||||
if (track->mdat_buf)
|
||||
|
@ -4349,6 +4359,10 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
|||
if (!mdat_size)
|
||||
return 0;
|
||||
|
||||
avio_write_marker(s->pb,
|
||||
av_rescale(mov->tracks[first_track].cluster[0].dts, AV_TIME_BASE, mov->tracks[first_track].timescale),
|
||||
(has_video ? starts_with_key : mov->tracks[first_track].cluster[0].flags & MOV_SYNC_SAMPLE) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT);
|
||||
|
||||
for (i = 0; i < mov->nb_streams; i++) {
|
||||
MOVTrack *track = &mov->tracks[i];
|
||||
int buf_size, write_moof = 1, moof_tracks = -1;
|
||||
|
@ -5807,8 +5821,10 @@ static int mov_write_trailer(AVFormatContext *s)
|
|||
avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
|
||||
mov_write_sidx_tags(pb, mov, -1, 0);
|
||||
avio_seek(pb, end, SEEK_SET);
|
||||
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
|
||||
mov_write_mfra_tag(pb, mov);
|
||||
} else {
|
||||
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
|
||||
mov_write_mfra_tag(pb, mov);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue