@@ -726,11 +726,11 @@ static void output_packet(OutputFile *of, AVPacket *pkt,
if (ret < 0)
goto finish;
while ((ret = av_bsf_receive_packet(ost->bsf_ctx, pkt)) >= 0)
- of_write_packet(of, pkt, ost, 0);
+ of_submit_packet(of, pkt, ost);
if (ret == AVERROR(EAGAIN))
ret = 0;
} else if (!eof)
- of_write_packet(of, pkt, ost, 0);
+ of_submit_packet(of, pkt, ost);
finish:
if (ret < 0 && ret != AVERROR_EOF) {
@@ -687,8 +687,7 @@ int of_check_init(OutputFile *of);
int of_write_trailer(OutputFile *of);
void of_close(OutputFile **pof);
-void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
- int unqueue);
+void of_submit_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost);
int of_finished(OutputFile *of);
int64_t of_filesize(OutputFile *of);
AVChapter * const *
@@ -102,39 +102,12 @@ static int queue_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
return 0;
}
-void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
- int unqueue)
+static void write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
{
AVFormatContext *s = of->ctx;
AVStream *st = ost->st;
int ret;
- /*
- * Audio encoders may split the packets -- #frames in != #packets out.
- * But there is no reordering, so we can limit the number of output packets
- * by simply dropping them here.
- * Counting encoded video frames needs to be done separately because of
- * reordering, see do_video_out().
- * Do not count the packet when unqueued because it has been counted when queued.
- */
- if (!(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed) && !unqueue) {
- if (ost->frame_number >= ost->max_frames) {
- av_packet_unref(pkt);
- return;
- }
- ost->frame_number++;
- }
-
- /* the muxer is not initialized yet, buffer the packet */
- if (!of->mux->header_written) {
- ret = queue_packet(of, ost, pkt);
- if (ret < 0) {
- av_packet_unref(pkt);
- exit_program(1);
- }
- return;
- }
-
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && video_sync_method == VSYNC_DROP) ||
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
pkt->pts = pkt->dts = AV_NOPTS_VALUE;
@@ -225,6 +198,38 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
}
}
+void of_submit_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost)
+{
+ AVStream *st = ost->st;
+ int ret;
+
+ /*
+ * Audio encoders may split the packets -- #frames in != #packets out.
+ * But there is no reordering, so we can limit the number of output packets
+ * by simply dropping them here.
+ * Counting encoded video frames needs to be done separately because of
+ * reordering, see do_video_out().
+ */
+ if (!(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed)) {
+ if (ost->frame_number >= ost->max_frames) {
+ av_packet_unref(pkt);
+ return;
+ }
+ ost->frame_number++;
+ }
+
+ if (of->mux->header_written) {
+ write_packet(of, ost, pkt);
+ } else {
+ /* the muxer is not initialized yet, buffer the packet */
+ ret = queue_packet(of, ost, pkt);
+ if (ret < 0) {
+ av_packet_unref(pkt);
+ exit_program(1);
+ }
+ }
+}
+
static int print_sdp(void)
{
char sdp[16384];
@@ -323,7 +328,7 @@ int of_check_init(OutputFile *of)
while (av_fifo_read(ms->muxing_queue, &pkt, 1) >= 0) {
ms->muxing_queue_data_size -= pkt->size;
- of_write_packet(of, pkt, ost, 1);
+ write_packet(of, ost, pkt);
av_packet_free(&pkt);
}
}