+static int write_packet_common(AVFormatContext *s, AVStream *st, AVPacket *pkt, int interleaved)
+{
+ int ret;
+
+ if (s->debug & FF_FDEBUG_TS)
+ av_log(s, AV_LOG_DEBUG, "%s size:%d dts:%s pts:%s\n", __FUNCTION__,
+ pkt->size, av_ts2str(pkt->dts), av_ts2str(pkt->pts));
+
+#if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
+ if ((ret = compute_muxer_pkt_fields(s, st, pkt)) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
+ return ret;
+#endif
+
+ if (interleaved) {
+ if (pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
+ return AVERROR(EINVAL);
+ return interleaved_write_packet(s, pkt, 0);
+ } else {
+ return write_packet(s, pkt);
+ }
+}
+
+static int write_packets_common(AVFormatContext *s, AVPacket *pkt, int interleaved)
+{
+ AVStream *st = s->streams[pkt->stream_index];
+ int ret = prepare_input_packet(s, pkt);
+ if (ret < 0)
+ return ret;
+
+ ret = do_packet_auto_bsf(s, pkt);
+ if (ret <= 0)
+ return ret;
+
+ return write_packet_common(s, st, pkt, interleaved);
+}
+