ffplay: add get_master_sync_type function

The real av_sync_type may be different to VideoState->av_sync_type, because the
required audio or video stream for audio or video clock may not be available.
We will use a function to query the real av_sync_type which is used for
determining the master clock.

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint 2012-10-13 21:33:32 +02:00
parent b2a8850969
commit fca16a1571
1 changed files with 24 additions and 10 deletions

View File

@ -1066,23 +1066,37 @@ static double get_external_clock(VideoState *is)
} }
} }
static int get_master_sync_type(VideoState *is) {
if (is->av_sync_type == AV_SYNC_VIDEO_MASTER) {
if (is->video_st)
return AV_SYNC_VIDEO_MASTER;
else
return AV_SYNC_AUDIO_MASTER;
} else if (is->av_sync_type == AV_SYNC_AUDIO_MASTER) {
if (is->audio_st)
return AV_SYNC_AUDIO_MASTER;
else
return AV_SYNC_VIDEO_MASTER;
} else {
return AV_SYNC_EXTERNAL_CLOCK;
}
}
/* get the current master clock value */ /* get the current master clock value */
static double get_master_clock(VideoState *is) static double get_master_clock(VideoState *is)
{ {
double val; double val;
if (is->av_sync_type == AV_SYNC_VIDEO_MASTER) { switch (get_master_sync_type(is)) {
if (is->video_st) case AV_SYNC_VIDEO_MASTER:
val = get_video_clock(is); val = get_video_clock(is);
else break;
case AV_SYNC_AUDIO_MASTER:
val = get_audio_clock(is); val = get_audio_clock(is);
} else if (is->av_sync_type == AV_SYNC_AUDIO_MASTER) { break;
if (is->audio_st) default:
val = get_audio_clock(is); val = get_external_clock(is);
else break;
val = get_video_clock(is);
} else {
val = get_external_clock(is);
} }
return val; return val;
} }