info = track->eac3_priv;
init_get_bits(&gbc, pkt->data, pkt->size * 8);
- if (avpriv_ac3_parse_header2(&gbc, &hdr) < 0) {
+ if (avpriv_ac3_parse_header(&gbc, &hdr) < 0) {
/* drop the packets until we see a good one */
if (!track->entry) {
av_log(mov, AV_LOG_WARNING, "Dropping invalid packet from start of the stream\n");
while (cumul_size != pkt->size) {
int i;
init_get_bits(&gbc, pkt->data + cumul_size, (pkt->size - cumul_size) * 8);
- if (avpriv_ac3_parse_header2(&gbc, &hdr) < 0)
+ if (avpriv_ac3_parse_header(&gbc, &hdr) < 0)
return AVERROR_INVALIDDATA;
if (hdr->frame_type != EAC3_FRAME_TYPE_DEPENDENT)
return AVERROR(EINVAL);
return ret;
if (info->num_blocks != 6)
return 0;
- av_free_packet(pkt);
+ av_packet_unref(pkt);
if ((ret = av_copy_packet(pkt, &info->pkt)) < 0)
return ret;
- av_free_packet(&info->pkt);
+ av_packet_unref(&info->pkt);
info->num_blocks = 0;
}
av_free(buf);
end:
- av_free_packet(&info->pkt);
+ av_packet_unref(&info->pkt);
av_freep(&track->eac3_priv);
return size;
return 0;
}
-static int mov_flush_fragment(AVFormatContext *s)
+static int mov_flush_fragment(AVFormatContext *s, int force)
{
MOVMuxContext *mov = s->priv_data;
int i, first_track = -1;
if (!mov->tracks[i].entry)
break;
/* Don't write the initial moov unless all tracks have data */
- if (i < mov->nb_streams)
+ if (i < mov->nb_streams && !force)
return 0;
moov_size = get_moov_size(s);
return 0;
}
-static int mov_auto_flush_fragment(AVFormatContext *s)
+static int mov_auto_flush_fragment(AVFormatContext *s, int force)
{
MOVMuxContext *mov = s->priv_data;
int had_moov = mov->moov_written;
- int ret = mov_flush_fragment(s);
+ int ret = mov_flush_fragment(s, force);
if (ret < 0)
return ret;
// If using delay_moov, the first flush only wrote the moov,
// not the actual moof+mdat pair, thus flush once again.
if (!had_moov && mov->flags & FF_MOV_FLAG_DELAY_MOOV)
- ret = mov_flush_fragment(s);
+ ret = mov_flush_fragment(s, force);
return ret;
}
// for the other ones that are flushed at the same time.
trk->track_duration = pkt->dts - trk->start_dts;
trk->end_pts = pkt->pts;
- mov_auto_flush_fragment(s);
+ mov_auto_flush_fragment(s, 0);
}
}
end.stream_index = stream_index;
ret = mov_write_single_packet(s, &end);
- av_free_packet(&end);
+ av_packet_unref(&end);
return ret;
}
static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
{
if (!pkt) {
- mov_flush_fragment(s);
+ mov_flush_fragment(s, 1);
return 1;
} else {
int i;
}
res = 0;
} else {
- mov_auto_flush_fragment(s);
+ mov_auto_flush_fragment(s, 1);
for (i = 0; i < mov->nb_streams; i++)
mov->tracks[i].data_offset = 0;
if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX) {