Skip to content

Commit b667e51

Browse files
author
eagleychen
committed
缓和切换速率
1 parent c2a7609 commit b667e51

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

ijkmedia/ijkplayer/ff_ffplay.c

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,7 @@ static void check_external_clock_speed(VideoState *is, FFPlayer *ffp) {
12191219
}
12201220
#endif
12211221

1222+
#if 0
12221223
static int temp_packet_num = 0;
12231224
if ((temp_packet_num > 0) || (ffp->packet_max_num > 0)) {
12241225
temp_packet_num = ffp->packet_max_num;
@@ -1252,7 +1253,50 @@ static void check_external_clock_speed(VideoState *is, FFPlayer *ffp) {
12521253
set_clock_speed(&is->extclk, 1);
12531254
}
12541255
}
1255-
//#endif
1256+
#endif
1257+
if (is->video_stream > 0) {
1258+
if (is->videoq.nb_packets > EXTERNAL_CLOCK_MAX_FRAMES) { //if (is->videoq.nb_packets > temp_packet_num) {
1259+
1260+
int synctype = get_master_sync_type(is);
1261+
if (synctype == AV_SYNC_AUDIO_MASTER) {
1262+
// printf("speeddddddd===audio===packets===>%d\n",is->videoq.nb_packets);
1263+
if (ffp->audio_speed > 1) {
1264+
ffp_set_playback_rate(ffp, ffp->audio_speed);
1265+
}else {
1266+
ffp_set_playback_rate(ffp, EXTERNAL_CLOCK_SPEED_MAX);
1267+
}
1268+
}else {
1269+
// printf("speeddddddd===exter===packets===>%d\n",is->videoq.nb_packets);
1270+
set_clock_speed(&is->extclk, EXTERNAL_CLOCK_SPEED_MAX);
1271+
}
1272+
1273+
}else if (is->videoq.nb_packets < EXTERNAL_CLOCK_MIN_FRAMES) {
1274+
1275+
ffp_set_playback_rate(ffp, 1);
1276+
double speed = is->extclk.speed;
1277+
if (speed != 1.0) {
1278+
set_clock_speed(&is->extclk, 1);
1279+
}
1280+
}
1281+
}
1282+
else {
1283+
//only audio stream
1284+
if (is->audio_stream >= 0) {
1285+
if (is->audioq.nb_packets > EXTERNAL_CLOCK_MAX_FRAMES) {
1286+
if (ffp->audio_speed > 1) {
1287+
ffp_set_playback_rate(ffp, ffp->audio_speed);
1288+
}else {
1289+
ffp_set_playback_rate(ffp, EXTERNAL_CLOCK_SPEED_MAX);
1290+
}
1291+
}else if (is->audioq.nb_packets < EXTERNAL_CLOCK_MIN_FRAMES){
1292+
ffp_set_playback_rate(ffp, 1);
1293+
double speed = is->extclk.speed;
1294+
if (speed != 1.0) {
1295+
set_clock_speed(&is->extclk, 1);
1296+
}
1297+
}
1298+
}
1299+
}
12561300
}
12571301

12581302
/* seek in the stream */

ijkmedia/ijkplayer/ff_ffplay_def.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@
9292
#define MIN_MIN_FRAMES 2
9393
#define MAX_MIN_FRAMES 50000
9494
#define MIN_FRAMES (ffp->dcc.min_frames)
95-
#define EXTERNAL_CLOCK_MIN_FRAMES 0
96-
#define EXTERNAL_CLOCK_MAX_FRAMES 5
95+
#define EXTERNAL_CLOCK_MIN_FRAMES 3
96+
#define EXTERNAL_CLOCK_MAX_FRAMES 10
9797

9898
/* Minimum SDL audio buffer size, in samples. */
9999
#define SDL_AUDIO_MIN_BUFFER_SIZE 512

0 commit comments

Comments
 (0)