OSDN Git Service

ffplay: add get_master_sync_type function
authorMarton Balint <cus@passwd.hu>
Sat, 13 Oct 2012 19:33:32 +0000 (21:33 +0200)
committerMarton Balint <cus@passwd.hu>
Sun, 21 Oct 2012 15:18:12 +0000 (17:18 +0200)
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>
ffplay.c

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