comparison libmpdemux/demuxer.c @ 37114:a4c2668dadb6

demuxer: Fall back to asking the stream layer for length. The bitrate-based estimate seem to be easily 2x off for some blurays for example.
author reimar
date Tue, 27 May 2014 19:22:09 +0000
parents aadf2020f6f0
children 3721d8f98dfe
comparison
equal deleted inserted replaced
37113:f5b5c7246439 37114:a4c2668dadb6
1493 double get_time_ans; 1493 double get_time_ans;
1494 sh_video_t *sh_video = demuxer->video->sh; 1494 sh_video_t *sh_video = demuxer->video->sh;
1495 sh_audio_t *sh_audio = demuxer->audio->sh; 1495 sh_audio_t *sh_audio = demuxer->audio->sh;
1496 // <= 0 means DEMUXER_CTRL_NOTIMPL or DEMUXER_CTRL_DONTKNOW 1496 // <= 0 means DEMUXER_CTRL_NOTIMPL or DEMUXER_CTRL_DONTKNOW
1497 if (demux_control 1497 if (demux_control
1498 (demuxer, DEMUXER_CTRL_GET_TIME_LENGTH, (void *) &get_time_ans) <= 0) { 1498 (demuxer, DEMUXER_CTRL_GET_TIME_LENGTH, (void *) &get_time_ans) <= 0 &&
1499 stream_control(demuxer->stream, STREAM_CTRL_GET_TIME_LENGTH, (void *)&get_time_ans) != STREAM_OK) {
1499 if (sh_video && sh_video->i_bps && sh_audio && sh_audio->i_bps) 1500 if (sh_video && sh_video->i_bps && sh_audio && sh_audio->i_bps)
1500 get_time_ans = (double) (demuxer->movi_end - 1501 get_time_ans = (double) (demuxer->movi_end -
1501 demuxer->movi_start) / (sh_video->i_bps + 1502 demuxer->movi_start) / (sh_video->i_bps +
1502 sh_audio->i_bps); 1503 sh_audio->i_bps);
1503 else if (sh_video && sh_video->i_bps) 1504 else if (sh_video && sh_video->i_bps)