diff --git a/ffplay.c b/ffplay.c
index 7276c4a..99e8c9a 100644
|
a
|
b
|
typedef struct PacketQueue {
|
| 114 | 114 | } PacketQueue; |
| 115 | 115 | |
| 116 | 116 | #define VIDEO_PICTURE_QUEUE_SIZE 4 |
| 117 | | #define SUBPICTURE_QUEUE_SIZE 4 |
| | 117 | #define SUBPICTURE_QUEUE_SIZE 12 |
| 118 | 118 | |
| 119 | 119 | typedef struct VideoPicture { |
| 120 | 120 | double pts; // presentation timestamp for this picture |
| … |
… |
static void video_image_display(VideoState *is)
|
| 788 | 788 | vp = &is->pictq[is->pictq_rindex]; |
| 789 | 789 | if (vp->bmp) { |
| 790 | 790 | if (is->subtitle_st) { |
| 791 | | if (is->subpq_size > 0) { |
| | 791 | if (is->subpq_size > 8) |
| | 792 | while (is->subpq_size > 4) { |
| 792 | 793 | sp = &is->subpq[is->subpq_rindex]; |
| 793 | | |
| 794 | | if (vp->pts >= sp->pts + ((float) sp->sub.start_display_time / 1000)) { |
| | 794 | if (++is->subpq_rindex == SUBPICTURE_QUEUE_SIZE) |
| | 795 | is->subpq_rindex = 0; |
| | 796 | SDL_LockMutex(is->subpq_mutex); |
| | 797 | is->subpq_size--; |
| | 798 | SDL_CondSignal(is->subpq_cond); |
| | 799 | SDL_UnlockMutex(is->subpq_mutex); |
| | 800 | |
| | 801 | if (vp->pts < sp->pts + ((float) sp->sub.start_display_time / 1000)) |
| | 802 | break; |
| 795 | 803 | SDL_LockYUVOverlay (vp->bmp); |
| 796 | 804 | |
| 797 | 805 | pict.data[0] = vp->bmp->pixels[0]; |
| … |
… |
static void video_image_display(VideoState *is)
|
| 807 | 815 | vp->bmp->w, vp->bmp->h); |
| 808 | 816 | |
| 809 | 817 | SDL_UnlockYUVOverlay (vp->bmp); |
| 810 | | } |
| 811 | 818 | } |
| 812 | 819 | } |
| 813 | 820 | |
| … |
… |
retry:
|
| 1393 | 1400 | SDL_CondSignal(is->subpq_cond); |
| 1394 | 1401 | SDL_UnlockMutex(is->subpq_mutex); |
| 1395 | 1402 | } else { |
| 1396 | | if (is->subpq_size > 0) { |
| | 1403 | if (0 && is->subpq_size > 4) { |
| 1397 | 1404 | sp = &is->subpq[is->subpq_rindex]; |
| 1398 | 1405 | |
| 1399 | 1406 | if (is->subpq_size > 1) |
| … |
… |
static int subtitle_thread(void *arg)
|
| 1990 | 1997 | if (sp->sub.pts != AV_NOPTS_VALUE) |
| 1991 | 1998 | pts = sp->sub.pts / (double)AV_TIME_BASE; |
| 1992 | 1999 | sp->pts = pts; |
| | 2000 | sp->pts = 0; |
| 1993 | 2001 | |
| 1994 | 2002 | for (i = 0; i < sp->sub.num_rects; i++) |
| 1995 | 2003 | { |