Mercurial > mplayer.hg
annotate TOOLS/bmovl-test.c @ 24787:02535b3216c5
Avoid text deformation and subtitles moving outside the screen in pan-and-scan
mode.
For this, crop amounts are passed from vo_gl as negative margins sizes. They
are used to calculate aspect ratio. They are ignored when calculating subtitle
positions, so subtitles will stay on screen most of the time.
Based on a patch by Jindrich Makovicka [makovick gmail com].
author | eugeni |
---|---|
date | Fri, 19 Oct 2007 18:16:23 +0000 |
parents | 7dbca1914d9f |
children | 0f1b5b68af32 |
rev | line source |
---|---|
22737
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
1 /* Small program to test the features of vf_bmovl */ |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
2 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
3 #include <unistd.h> |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
4 #include <fcntl.h> |
22739
25586323a128
Include stdlib.h and string.h to fix the following warnings:
diego
parents:
22737
diff
changeset
|
5 #include <string.h> |
25586323a128
Include stdlib.h and string.h to fix the following warnings:
diego
parents:
22737
diff
changeset
|
6 #include <stdlib.h> |
22741
edaeb008ba93
Add explicit SDL include path. This should allow compilation even when
diego
parents:
22740
diff
changeset
|
7 #include <SDL/SDL.h> |
edaeb008ba93
Add explicit SDL include path. This should allow compilation even when
diego
parents:
22740
diff
changeset
|
8 #include <SDL/SDL_image.h> |
22737
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
9 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
10 #define DEBUG 0 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
11 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
12 static void |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
13 blit(int fifo, unsigned char *bitmap, int width, int height, |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
14 int xpos, int ypos, int alpha, int clear) |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
15 { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
16 char str[100]; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
17 int nbytes; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
18 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
19 sprintf(str, "RGBA32 %d %d %d %d %d %d\n", |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
20 width, height, xpos, ypos, alpha, clear); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
21 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
22 if(DEBUG) printf("Sending %s", str); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
23 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
24 write(fifo, str, strlen(str)); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
25 nbytes = write(fifo, bitmap, width*height*4); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
26 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
27 if(DEBUG) printf("Sent %d bytes of bitmap data...\n", nbytes); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
28 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
29 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
30 static void |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
31 set_alpha(int fifo, int width, int height, int xpos, int ypos, int alpha) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
32 char str[100]; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
33 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
34 sprintf(str, "ALPHA %d %d %d %d %d\n", |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
35 width, height, xpos, ypos, alpha); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
36 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
37 if(DEBUG) printf("Sending %s", str); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
38 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
39 write(fifo, str, strlen(str)); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
40 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
41 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
42 static void |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
43 paint(unsigned char* bitmap, int size, int red, int green, int blue, int alpha) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
44 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
45 int i; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
46 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
47 for(i=0; i < size; i+=4) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
48 bitmap[i+0] = red; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
49 bitmap[i+1] = green; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
50 bitmap[i+2] = blue; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
51 bitmap[i+3] = alpha; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
52 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
53 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
54 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
55 int main(int argc, char **argv) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
56 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
57 int fifo=-1; |
23700 | 58 int width=0, height=0; |
22737
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
59 unsigned char *bitmap; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
60 SDL_Surface *image; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
61 int i; |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
62 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
63 if(argc<3) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
64 printf("Usage: %s <bmovl fifo> <image file> <width> <height>\n", argv[0]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
65 printf("width and height are w/h of MPlayer's screen!\n"); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
66 exit(10); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
67 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
68 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
69 width = atoi(argv[3]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
70 height = atoi(argv[4]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
71 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
72 fifo = open( argv[1], O_RDWR ); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
73 if(!fifo) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
74 fprintf(stderr, "Error opening FIFO %s!\n", argv[1]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
75 exit(10); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
76 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
77 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
78 image = IMG_Load(argv[2]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
79 if(!image) { |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
80 fprintf(stderr, "Couldn't load image %s!\n", argv[2]); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
81 exit(10); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
82 } |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
83 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
84 printf("Loaded image %s: width=%d, height=%d\n", argv[2], image->w, image->h); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
85 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
86 // Display and move image |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
87 for(i=0; (i < (width - image->w)) && (i < (height - image->h)); i += 5) |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
88 blit(fifo, image->pixels, image->w, image->h, i, i, 0, 1); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
89 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
90 // Create a 75x75 bitmap |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
91 bitmap = (unsigned char*)malloc(75*75*4); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
92 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
93 // Paint bitmap red, 50% transparent and blit at position 50,50 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
94 paint(bitmap, (75*75*4), 255, 0, 0, 128); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
95 blit(fifo, bitmap, 75, 75, 50, 50, 0, 0); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
96 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
97 // Paint bitmap green, 50% transparent and blit at position -50,50 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
98 paint(bitmap, (75*75*4), 0, 255, 0, 128); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
99 blit(fifo, bitmap, 75, 75, width-50-75, 50, 0, 0); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
100 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
101 // Paint bitmap blue, 50% transparent and blit at position -50,50 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
102 paint(bitmap, (75*75*4), 0, 0, 255, 128); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
103 blit(fifo, bitmap, 75, 75, 50, height-50-75, 0, 0); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
104 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
105 // Blit another image in the middle, completly transparent |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
106 blit(fifo, image->pixels, image->w, image->h, |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
107 (width/2)-(image->w/2), (height/2)-(image->h/2), -255, 0); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
108 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
109 // Fade in image |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
110 for(i=-255; i <= 0; i++) |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
111 set_alpha(fifo, image->w, image->h, |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
112 (width/2)-(image->w/2), (height/2)-(image->h/2), i); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
113 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
114 |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
115 // Clean up |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
116 free(bitmap); |
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
117 SDL_FreeSurface(image); |
22740 | 118 |
119 return 0; | |
22737
6ce48e36dc01
Move gltest and bmovl-test into the main TOOLS directory, subdirectories
diego
parents:
diff
changeset
|
120 } |