@@ -1119,8 +1119,8 @@ static void sync_clock_to_slave(Clock *c, Clock *slave)
11191119}
11201120
11211121static int get_master_sync_type (VideoState * is ) {
1122- if (is -> realtime )
1123- return AV_SYNC_EXTERNAL_CLOCK ;
1122+ // if (is->realtime)
1123+ // return AV_SYNC_EXTERNAL_CLOCK;
11241124 if (is -> av_sync_type == AV_SYNC_VIDEO_MASTER ) {
11251125 if (is -> video_st )
11261126 return AV_SYNC_VIDEO_MASTER ;
@@ -1155,7 +1155,7 @@ static double get_master_clock(VideoState *is)
11551155 return val ;
11561156}
11571157
1158- static void check_external_clock_speed (VideoState * is ) {
1158+ static void check_external_clock_speed (VideoState * is , FFPlayer * ffp ) {
11591159#if 0
11601160 if ((is -> video_stream >= 0 && is -> videoq .nb_packets <= EXTERNAL_CLOCK_MIN_FRAMES ) ||
11611161 (is -> audio_stream >= 0 && is -> audioq .nb_packets <= EXTERNAL_CLOCK_MIN_FRAMES )) {
@@ -1168,7 +1168,10 @@ static void check_external_clock_speed(VideoState *is) {
11681168 if (speed != 1.0 )
11691169 set_clock_speed (& is -> extclk , speed + EXTERNAL_CLOCK_SPEED_STEP * (1.0 - speed ) / fabs (1.0 - speed ));
11701170 }
1171- #else
1171+ #endif
1172+
1173+ #if 0
1174+ //#else
11721175 if (is -> video_stream > 0 && is -> videoq .nb_packets > EXTERNAL_CLOCK_MAX_FRAMES ) {
11731176 set_clock_speed (& is -> extclk , FFMIN (EXTERNAL_CLOCK_SPEED_MAX , is -> extclk .speed + EXTERNAL_CLOCK_SPEED_STEP_UP ));
11741177 } else {
@@ -1177,6 +1180,21 @@ static void check_external_clock_speed(VideoState *is) {
11771180 set_clock_speed (& is -> extclk , speed + EXTERNAL_CLOCK_SPEED_STEP * (1.0 - speed ) / fabs (1.0 - speed ));
11781181 }
11791182#endif
1183+ if (is -> videoq .nb_packets > EXTERNAL_CLOCK_MAX_FRAMES ) {
1184+
1185+ int synctype = get_master_sync_type (is );
1186+ if (synctype == AV_SYNC_AUDIO_MASTER ) {
1187+ // printf("speeddddddd===audio===packets===>%d\n",is->videoq.nb_packets);
1188+ ffp_set_playback_rate (ffp , EXTERNAL_CLOCK_SPEED_MAX );
1189+ }else {
1190+ // printf("speeddddddd===exter===packets===>%d\n",is->videoq.nb_packets);
1191+ set_clock_speed (& is -> extclk , EXTERNAL_CLOCK_SPEED_MAX );
1192+ }
1193+ }else {
1194+ ffp_set_playback_rate (ffp , 1 );
1195+ set_clock_speed (& is -> extclk , 1 );
1196+ }
1197+ //#endif
11801198}
11811199
11821200/* seek in the stream */
@@ -1324,8 +1342,8 @@ static void video_refresh(FFPlayer *opaque, double *remaining_time)
13241342
13251343 Frame * sp , * sp2 ;
13261344
1327- if (!is -> paused && get_master_sync_type (is ) == AV_SYNC_EXTERNAL_CLOCK && is -> realtime )
1328- check_external_clock_speed (is );
1345+ if (!is -> paused && ( get_master_sync_type (is ) == AV_SYNC_EXTERNAL_CLOCK || get_master_sync_type ( is ) == AV_SYNC_AUDIO_MASTER ) && is -> realtime )
1346+ check_external_clock_speed (is , ffp );
13291347
13301348 if (!ffp -> display_disable && is -> show_mode != SHOW_MODE_VIDEO && is -> audio_st ) {
13311349 time = av_gettime_relative () / 1000000.0 ;
@@ -2663,6 +2681,8 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
26632681 SDL_AoutSetPlaybackRate (ffp -> aout , ffp -> pf_playback_rate );
26642682#endif
26652683 }
2684+ // printf("mmmmmmmmm===>%f\n",ffp->pf_playback_rate);
2685+
26662686 if (ffp -> pf_playback_volume_changed ) {
26672687 ffp -> pf_playback_volume_changed = 0 ;
26682688 SDL_AoutSetPlaybackVolume (ffp -> aout , ffp -> pf_playback_volume );
@@ -3300,7 +3320,7 @@ static int read_thread(void *arg)
33003320 if (st_index [AVMEDIA_TYPE_AUDIO ] >= 0 ) {
33013321 stream_component_open (ffp , st_index [AVMEDIA_TYPE_AUDIO ]);
33023322 } else {
3303- ffp -> av_sync_type = AV_SYNC_VIDEO_MASTER ;
3323+ ffp -> av_sync_type = AV_SYNC_EXTERNAL_CLOCK ;
33043324 is -> av_sync_type = ffp -> av_sync_type ;
33053325 }
33063326
0 commit comments