Commit 0072116c authored by Clément Bœsch's avatar Clément Bœsch

lavf: split packets before muxing.

After demuxing, data and side are merged. Before decoding, they are
split. Encoder will perform with data and side split. This means that a
muxer can receive split data (after encoding) but also merged data (if
called directly after demuxing). This commit makes sure data and side
are split for the muxer.
parent 52f21763
......@@ -484,13 +484,29 @@ static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt)
return 0;
}
/**
* Move side data from payload to internal struct, call muxer, and restore
* original packet.
*/
static inline int split_write_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret;
AVPacket spkt = *pkt;
av_packet_split_side_data(&spkt);
ret = s->oformat->write_packet(s, &spkt);
spkt.data = NULL;
av_destruct_packet(&spkt);
return ret;
}
int av_write_frame(AVFormatContext *s, AVPacket *pkt)
{
int ret;
if (!pkt) {
if (s->oformat->flags & AVFMT_ALLOW_FLUSH) {
ret = s->oformat->write_packet(s, pkt);
ret = s->oformat->write_packet(s, NULL);
if (ret >= 0 && s->pb && s->pb->error < 0)
ret = s->pb->error;
return ret;
......@@ -503,7 +519,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt)
if (ret < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
return ret;
ret = s->oformat->write_packet(s, pkt);
ret = split_write_packet(s, pkt);
if (ret >= 0 && s->pb && s->pb->error < 0)
ret = s->pb->error;
......@@ -733,7 +749,7 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
if (ret <= 0) //FIXME cleanup needed for ret<0 ?
return ret;
ret = s->oformat->write_packet(s, &opkt);
ret = split_write_packet(s, &opkt);
if (ret >= 0)
s->streams[opkt.stream_index]->nb_frames++;
......@@ -759,7 +775,7 @@ int av_write_trailer(AVFormatContext *s)
if (!ret)
break;
ret = s->oformat->write_packet(s, &pkt);
ret = split_write_packet(s, &pkt);
if (ret >= 0)
s->streams[pkt.stream_index]->nb_frames++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment