@@ -1768,7 +1768,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
continue;
}
- of_streamcopy(ist, ost, pkt, ist->dts);
+ of_streamcopy(ost, pkt, ist->dts);
}
return !eof_reached;
@@ -876,8 +876,7 @@ void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof)
/**
* @param dts predicted packet dts in AV_TIME_BASE_Q
*/
-void of_streamcopy(InputStream *ist, OutputStream *ost,
- const AVPacket *pkt, int64_t dts);
+void of_streamcopy(OutputStream *ost, const AVPacket *pkt, int64_t dts);
int64_t of_filesize(OutputFile *of);
@@ -378,10 +378,10 @@ fail:
}
-void of_streamcopy(InputStream *ist, OutputStream *ost,
- const AVPacket *pkt, int64_t dts)
+void of_streamcopy(OutputStream *ost, const AVPacket *pkt, int64_t dts)
{
OutputFile *of = output_files[ost->file_index];
+ MuxStream *ms = ms_from_ost(ost);
int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->mux_timebase);
AVPacket *opkt = ost->pkt;
@@ -430,7 +430,7 @@ void of_streamcopy(InputStream *ist, OutputStream *ost,
duration = ost->par_in->frame_size;
opkt->dts = av_rescale_delta(pkt->time_base, pkt->dts,
(AVRational){1, ost->par_in->sample_rate}, duration,
- &ist->filter_in_rescale_delta_last, opkt->time_base);
+ &ms->ts_rescale_delta_last, opkt->time_base);
/* dts will be set immediately afterwards to what pts is now */
opkt->pts = opkt->dts - ost_tb_start_time;
} else
@@ -64,6 +64,9 @@ typedef struct MuxStream {
* used for making up missing dts values */
int64_t last_mux_dts;
+ // audio streamcopy - state for av_rescale_delta()
+ int64_t ts_rescale_delta_last;
+
// combined size of all the packets sent to the muxer
uint64_t data_size_mux;
} MuxStream;