annotate TOOLS/bmovl-test/bmovl-test.c @ 8843:c70444c5b516

I have seen problems where DVD subtitles don't display at the right time and sometimes they don't appear at all. The problem stems from the fact that subtitle command packets are being applied as soon as they are read and assembled from the input stream. Sometimes, a fully assembled subtitle packet arrives at the spudec_assemble function before the previous subtitle appears onscreen and thus the viewer only sees the second subtitle. So I created a patch that queues assembled subtitle packets and applies them at the appropriate time within the heartbeat function. The reset function clears the packet queue when seeking through the video. Tomasz Farkas <tomasz_farkas@yahoo.co.uk>
author arpi
date Wed, 08 Jan 2003 18:36:36 +0000
parents ac161720f4f0
children 0e1b59efcef3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7856
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
1 /* Small program to test the features of vf_bmovl */
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
2
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
3 #include <unistd.h>
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
4 #include <fcntl.h>
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
5 #include <SDL.h>
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
6 #include <SDL_image.h>
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
7
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
8 #define DEBUG 0
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
9
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
10 static void
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
11 blit(int fifo, unsigned char *bitmap, int width, int height,
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
12 int xpos, int ypos, int alpha, int clear)
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
13 {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
14 char str[100];
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
15 int nbytes;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
16
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
17 sprintf(str, "RGBA32 %d %d %d %d %d %d\n",
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
18 width, height, xpos, ypos, alpha, clear);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
19
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
20 if(DEBUG) printf("Sending %s", str);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
21
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
22 write(fifo, str, strlen(str));
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
23 nbytes = write(fifo, bitmap, width*height*4);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
24
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
25 if(DEBUG) printf("Sent %d bytes of bitmap data...\n", nbytes);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
26 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
27
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
28 static void
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
29 set_alpha(int fifo, int width, int height, int xpos, int ypos, int alpha) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
30 char str[100];
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
31
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
32 sprintf(str, "ALPHA %d %d %d %d %d\n",
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
33 width, height, xpos, ypos, alpha);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
34
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
35 if(DEBUG) printf("Sending %s", str);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
36
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
37 write(fifo, str, strlen(str));
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
38 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
39
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
40 static void
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
41 paint(unsigned char* bitmap, int size, int red, int green, int blue, int alpha) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
42
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
43 int i;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
44
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
45 for(i=0; i < size; i+=4) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
46 bitmap[i+0] = red;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
47 bitmap[i+1] = green;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
48 bitmap[i+2] = blue;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
49 bitmap[i+3] = alpha;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
50 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
51 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
52
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
53 int main(int argc, char **argv) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
54
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
55 int fifo=-1;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
56 int width=0, height=0, xpos=0, ypos=0, alpha=0, clear=0;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
57 unsigned char *bitmap;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
58 SDL_Surface *image;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
59 int i;
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
60
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
61 if(argc<3) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
62 printf("Usage: %s <bmovl fifo> <image file> <width> <height>\n", argv[0]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
63 printf("width and height are w/h of MPlayer's screen!\n");
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
64 exit(10);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
65 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
66
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
67 width = atoi(argv[3]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
68 height = atoi(argv[4]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
69
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
70 fifo = open( argv[1], O_RDWR );
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
71 if(!fifo) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
72 fprintf(stderr, "Error opening FIFO %s!\n", argv[1]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
73 exit(10);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
74 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
75
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
76 image = IMG_Load(argv[2]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
77 if(!image) {
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
78 fprintf(stderr, "Couldn't load image %s!\n", argv[2]);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
79 exit(10);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
80 }
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
81
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
82 printf("Loaded image %s: width=%d, height=%d\n", argv[2], image->w, image->h);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
83
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
84 // Display and move image
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
85 for(i=0; (i < (width - image->w)) && (i < (height - image->h)); i += 5)
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
86 blit(fifo, image->pixels, image->w, image->h, i, i, 0, 1);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
87
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
88 // Create a 75x75 bitmap
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
89 bitmap = (unsigned char*)malloc(75*75*4);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
90
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
91 // Paint bitmap red, 50% transparent and blit at position 50,50
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
92 paint(bitmap, (75*75*4), 255, 0, 0, 128);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
93 blit(fifo, bitmap, 75, 75, 50, 50, 0, 0);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
94
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
95 // Paint bitmap green, 50% transparent and blit at position -50,50
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
96 paint(bitmap, (75*75*4), 0, 255, 0, 128);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
97 blit(fifo, bitmap, 75, 75, width-50-75, 50, 0, 0);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
98
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
99 // Paint bitmap green, 50% transparent and blit at position -50,50
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
100 paint(bitmap, (75*75*4), 0, 0, 255, 128);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
101 blit(fifo, bitmap, 75, 75, 50, height-50-75, 0, 0);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
102
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
103 // Blit another image in the middle, completly transparent
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
104 blit(fifo, image->pixels, image->w, image->h,
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
105 (width/2)-(image->w/2), (height/2)-(image->h/2), -255, 0);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
106
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
107 // Fade in image
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
108 for(i=-255; i <= 0; i++)
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
109 set_alpha(fifo, image->w, image->h,
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
110 (width/2)-(image->w/2), (height/2)-(image->h/2), i);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
111
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
112
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
113 // Clean up
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
114 free(bitmap);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
115 SDL_FreeSurface(image);
ac161720f4f0 sample client for -vop bmovl -- loads and alphablend any PNG file
arpi
parents:
diff changeset
116 }