aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Abeni <lucabe72@email.it>2004-06-18 03:03:32 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-06-18 03:03:32 +0000
commit6e454c38b0e67c9df68492bc7fb00c7f4c911abb (patch)
treecc7388b9824f47cf263be96e4eb0796309eacb8b
parent30b5382bf900889def36daa05a96624c27618119 (diff)
downloadffmpeg-6e454c38b0e67c9df68492bc7fb00c7f4c911abb.tar.gz
A/V Synch in ffmpeg patch by (Luca Abeni <lucabe72 at email dot it>)
Originally committed as revision 3233 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--ffmpeg.c16
-rw-r--r--libavformat/audio.c1
2 files changed, 12 insertions, 5 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 4023ebf84b..3012aa826c 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -225,6 +225,7 @@ static int64_t audio_size = 0;
static int64_t extra_size = 0;
static int nb_frames_dup = 0;
static int nb_frames_drop = 0;
+static int input_sync;
#define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
@@ -1655,16 +1656,20 @@ static int av_encode(AVFormatContext **output_files,
/* select the stream that we must read now by looking at the
smallest output pts */
file_index = -1;
- pts_min = 1e10;
+ pts_min = 1e100;
for(i=0;i<nb_ostreams;i++) {
double pts;
ost = ost_table[i];
os = output_files[ost->file_index];
ist = ist_table[ost->source_index];
- if(ost->st->codec.codec_type == CODEC_TYPE_VIDEO)
- pts = (double)ost->sync_opts * ost->st->codec.frame_rate_base / ost->st->codec.frame_rate;
- else
- pts = (double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den;
+ if (input_sync == 0) {
+ if(ost->st->codec.codec_type == CODEC_TYPE_VIDEO)
+ pts = (double)ost->sync_opts * ost->st->codec.frame_rate_base / ost->st->codec.frame_rate;
+ else
+ pts = (double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den;
+ } else {
+ pts = (double)ist->pts;
+ }
if (!file_table[ist->file_index].eof_reached &&
pts < pts_min) {
pts_min = pts;
@@ -3792,6 +3797,7 @@ int main(int argc, char **argv)
}
if (nb_input_files == 0) {
+ input_sync = 1;
prepare_grab();
}
diff --git a/libavformat/audio.c b/libavformat/audio.c
index e3e5888e9b..5296333669 100644
--- a/libavformat/audio.c
+++ b/libavformat/audio.c
@@ -263,6 +263,7 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt)
if (ret == -1 && (errno == EAGAIN || errno == EINTR)) {
av_free_packet(pkt);
pkt->size = 0;
+ pkt->pts = av_gettime() & ((1LL << 48) - 1);
return 0;
}
if (!(ret == 0 || (ret == -1 && (errno == EAGAIN || errno == EINTR)))) {