summaryrefslogtreecommitdiffstats
path: root/video/decode
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-03-20 22:07:26 +0100
committerwm4 <wm4@nowhere>2015-03-20 22:08:12 +0100
commitfe0c37b00715e17d84b524b0f6f57d910a82806d (patch)
tree8a0edfe4d8e8229d2bc324bb18fe276872ce85f2 /video/decode
parent29083ae31bbe80c6f2459541335b801ced585627 (diff)
downloadmpv-fe0c37b00715e17d84b524b0f6f57d910a82806d.tar.bz2
mpv-fe0c37b00715e17d84b524b0f6f57d910a82806d.tar.xz
player: better handling of video with no timestamps
Trying to handle such video is almost worthless, but it was requested by at least 2 users. If there are no timestamps, enable byte seeking by setting ts_resets_possible. Use the video FPS (wherever it comes from) and the audio samplerate for timing. The latter was already done by making the first packet emit DTS=0; remove this again and do it "properly" in a higher level.
Diffstat (limited to 'video/decode')
-rw-r--r--video/decode/dec_video.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index a0bd6cb047..c578ccadcc 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -200,6 +200,12 @@ bool video_init_best_codec(struct dec_video *d_video, char* video_decoders)
d_video->header->codec ? d_video->header->codec : "<unknown>");
}
+ if (d_video->header->missing_timestamps) {
+ MP_WARN(d_video, "This stream has no timestamps!\n");
+ MP_WARN(d_video, "Making up playback time using %f FPS.\n", d_video->fps);
+ MP_WARN(d_video, "Seeking will probably fail badly.\n");
+ }
+
talloc_free(list);
return !!d_video->vd_driver;
}
@@ -351,7 +357,7 @@ struct mp_image *video_decode(struct dec_video *d_video,
pts = retrieve_sorted_pts(d_video, pts);
if (!opts->correct_pts || pts == MP_NOPTS_VALUE) {
- if (opts->correct_pts)
+ if (opts->correct_pts && !d_video->header->missing_timestamps)
MP_WARN(d_video, "No video PTS! Making something up.\n");
double frame_time = 1.0f / (d_video->fps > 0 ? d_video->fps : 25);