mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
movenc: Don't use track_id to decide which track is the first in a moof
If one track doesn't have any samples within a moof, no traf/trun is written for it. When the omit_tfhd_offset flag is set, none of the tfhd atoms have any base_data_offset set, and the implicit offset (end of previous track fragment data, or start of the moof for the first trun) is used. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
84bf64d359
commit
573b1de2d7
@ -2458,7 +2458,7 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVMuxContext *mov,
|
|||||||
avio_wb32(pb, track->entry); /* sample count */
|
avio_wb32(pb, track->entry); /* sample count */
|
||||||
if (mov->flags & FF_MOV_FLAG_OMIT_TFHD_OFFSET &&
|
if (mov->flags & FF_MOV_FLAG_OMIT_TFHD_OFFSET &&
|
||||||
!(mov->flags & FF_MOV_FLAG_SEPARATE_MOOF) &&
|
!(mov->flags & FF_MOV_FLAG_SEPARATE_MOOF) &&
|
||||||
track->track_id != 1)
|
!mov->first_trun)
|
||||||
avio_wb32(pb, 0); /* Later tracks follow immediately after the previous one */
|
avio_wb32(pb, 0); /* Later tracks follow immediately after the previous one */
|
||||||
else
|
else
|
||||||
avio_wb32(pb, moof_size + 8 + track->data_offset +
|
avio_wb32(pb, moof_size + 8 + track->data_offset +
|
||||||
@ -2477,6 +2477,7 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVMuxContext *mov,
|
|||||||
avio_wb32(pb, track->cluster[i].cts);
|
avio_wb32(pb, track->cluster[i].cts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mov->first_trun = 0;
|
||||||
return update_size(pb, pos);
|
return update_size(pb, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2598,6 +2599,7 @@ static int mov_write_moof_tag_internal(AVIOContext *pb, MOVMuxContext *mov,
|
|||||||
|
|
||||||
avio_wb32(pb, 0); /* size placeholder */
|
avio_wb32(pb, 0); /* size placeholder */
|
||||||
ffio_wfourcc(pb, "moof");
|
ffio_wfourcc(pb, "moof");
|
||||||
|
mov->first_trun = 1;
|
||||||
|
|
||||||
mov_write_mfhd_tag(pb, mov);
|
mov_write_mfhd_tag(pb, mov);
|
||||||
for (i = 0; i < mov->nb_streams; i++) {
|
for (i = 0; i < mov->nb_streams; i++) {
|
||||||
|
@ -158,6 +158,7 @@ typedef struct MOVMuxContext {
|
|||||||
int max_fragment_size;
|
int max_fragment_size;
|
||||||
int ism_lookahead;
|
int ism_lookahead;
|
||||||
AVIOContext *mdat_buf;
|
AVIOContext *mdat_buf;
|
||||||
|
int first_trun;
|
||||||
|
|
||||||
int64_t reserved_moov_pos;
|
int64_t reserved_moov_pos;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user