|
|
@@ -2518,6 +2518,7 @@ static int mov_flush_fragment(AVFormatContext *s) |
|
|
mov->tracks[i].cluster[0].dts; |
|
|
mov->tracks[i].cluster[0].dts; |
|
|
mov->tracks[i].entry = 0; |
|
|
mov->tracks[i].entry = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
avio_flush(s->pb); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@@ -2557,6 +2558,7 @@ static int mov_flush_fragment(AVFormatContext *s) |
|
|
|
|
|
|
|
|
if (write_moof) { |
|
|
if (write_moof) { |
|
|
MOVFragmentInfo *info; |
|
|
MOVFragmentInfo *info; |
|
|
|
|
|
avio_flush(s->pb); |
|
|
track->nb_frag_info++; |
|
|
track->nb_frag_info++; |
|
|
track->frag_info = av_realloc(track->frag_info, |
|
|
track->frag_info = av_realloc(track->frag_info, |
|
|
sizeof(*track->frag_info) * |
|
|
sizeof(*track->frag_info) * |
|
|
@@ -2589,6 +2591,7 @@ static int mov_flush_fragment(AVFormatContext *s) |
|
|
|
|
|
|
|
|
mov->mdat_size = 0; |
|
|
mov->mdat_size = 0; |
|
|
|
|
|
|
|
|
|
|
|
avio_flush(s->pb); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@@ -2602,7 +2605,9 @@ static int mov_write_packet_internal(AVFormatContext *s, AVPacket *pkt) |
|
|
int size= pkt->size; |
|
|
int size= pkt->size; |
|
|
uint8_t *reformatted_data = NULL; |
|
|
uint8_t *reformatted_data = NULL; |
|
|
|
|
|
|
|
|
if (!s->pb->seekable) return 0; /* Can't handle that */ |
|
|
|
|
|
|
|
|
if (!s->pb->seekable && !(mov->flags & FF_MOV_FLAG_EMPTY_MOOV)) |
|
|
|
|
|
return 0; /* Can't handle that */ |
|
|
|
|
|
|
|
|
if (!size) return 0; /* Discard 0 sized packets */ |
|
|
if (!size) return 0; /* Discard 0 sized packets */ |
|
|
|
|
|
|
|
|
if ((mov->max_fragment_duration && trk->entry && |
|
|
if ((mov->max_fragment_duration && trk->entry && |
|
|
@@ -2782,7 +2787,13 @@ static int mov_write_header(AVFormatContext *s) |
|
|
AVDictionaryEntry *t; |
|
|
AVDictionaryEntry *t; |
|
|
int i, hint_track = 0; |
|
|
int i, hint_track = 0; |
|
|
|
|
|
|
|
|
if (!s->pb->seekable) { |
|
|
|
|
|
|
|
|
/* Non-seekable output is ok if EMPTY_MOOV is set, or if using the ismv |
|
|
|
|
|
* format (which sets EMPTY_MOOV later in this function). If ism_lookahead |
|
|
|
|
|
* is enabled, we don't support non-seekable output at all. */ |
|
|
|
|
|
if (!s->pb->seekable && |
|
|
|
|
|
((!(mov->flags & FF_MOV_FLAG_EMPTY_MOOV) && |
|
|
|
|
|
!(s->oformat && !strcmp(s->oformat->name, "ismv"))) |
|
|
|
|
|
|| mov->ism_lookahead)) { |
|
|
av_log(s, AV_LOG_ERROR, "muxer does not support non seekable output\n"); |
|
|
av_log(s, AV_LOG_ERROR, "muxer does not support non seekable output\n"); |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|
|