annotate libmpcodecs/vf_rgbtest.c @ 22997:fd0fda0c6555

skip MMX code in rgb24tobgr24 if the size of the input is smaller than the size of the units the MMX code processes
author ivo
date Wed, 18 Apr 2007 09:27:59 +0000
parents 20aca9baf5d8
children f8d4f8eff72b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
1 #include <stdio.h>
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
2 #include <stdlib.h>
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
3 #include <string.h>
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
4 #include <inttypes.h>
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
5
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13145
diff changeset
6 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13145
diff changeset
7 #include "mp_msg.h"
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
8
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
9 #include "img_format.h"
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
10 #include "mp_image.h"
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
11 #include "vf.h"
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
12
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13145
diff changeset
13 #include "libvo/fastmemcpy.h"
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
14
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
15 //===========================================================================//
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
16
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
17 struct vf_priv_s {
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
18 unsigned int fmt;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
19 };
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
20
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
21 static unsigned int getfmt(unsigned int outfmt){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
22 switch(outfmt){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
23 case IMGFMT_RGB15:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
24 case IMGFMT_RGB16:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
25 case IMGFMT_RGB24:
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
26 case IMGFMT_RGBA:
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
27 case IMGFMT_ARGB:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
28 case IMGFMT_BGR15:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
29 case IMGFMT_BGR16:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
30 case IMGFMT_BGR24:
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
31 case IMGFMT_BGRA:
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
32 case IMGFMT_ABGR:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
33 return outfmt;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
34 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
35 return 0;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
36 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
37
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
38 static void put_pixel(uint8_t *buf, int x, int y, int stride, int r, int g, int b, int fmt){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
39 switch(fmt){
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
40 case IMGFMT_BGR15: ((uint16_t*)(buf + y*stride))[x]= ((r>>3)<<10) | ((g>>3)<<5) | (b>>3);
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
41 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
42 case IMGFMT_RGB15: ((uint16_t*)(buf + y*stride))[x]= ((b>>3)<<10) | ((g>>3)<<5) | (r>>3);
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
43 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
44 case IMGFMT_BGR16: ((uint16_t*)(buf + y*stride))[x]= ((r>>3)<<11) | ((g>>2)<<5) | (b>>3);
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
45 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
46 case IMGFMT_RGB16: ((uint16_t*)(buf + y*stride))[x]= ((b>>3)<<11) | ((g>>2)<<5) | (r>>3);
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
47 break;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
48 case IMGFMT_RGB24:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
49 buf[3*x + y*stride + 0]= r;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
50 buf[3*x + y*stride + 1]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
51 buf[3*x + y*stride + 2]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
52 break;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
53 case IMGFMT_BGR24:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
54 buf[3*x + y*stride + 0]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
55 buf[3*x + y*stride + 1]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
56 buf[3*x + y*stride + 2]= r;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
57 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
58 case IMGFMT_RGBA:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
59 buf[4*x + y*stride + 0]= r;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
60 buf[4*x + y*stride + 1]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
61 buf[4*x + y*stride + 2]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
62 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
63 case IMGFMT_BGRA:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
64 buf[4*x + y*stride + 0]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
65 buf[4*x + y*stride + 1]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
66 buf[4*x + y*stride + 2]= r;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
67 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
68 case IMGFMT_ARGB:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
69 buf[4*x + y*stride + 1]= r;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
70 buf[4*x + y*stride + 2]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
71 buf[4*x + y*stride + 3]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
72 break;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
73 case IMGFMT_ABGR:
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
74 buf[4*x + y*stride + 1]= b;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
75 buf[4*x + y*stride + 2]= g;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
76 buf[4*x + y*stride + 3]= r;
13145
be7ed0dfe056 change to match current bgr/rgb definition
michael
parents: 11894
diff changeset
77 break;
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
78 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
79 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
80
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
81 static int config(struct vf_instance_s* vf,
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
82 int width, int height, int d_width, int d_height,
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
83 unsigned int flags, unsigned int outfmt){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
84 vf->priv->fmt=getfmt(outfmt);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
85 mp_msg(MSGT_VFILTER,MSGL_V,"rgb test format:%s\n", vo_format_name(outfmt));
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
86 return vf_next_config(vf,width,height,d_width,d_height,flags,vf->priv->fmt);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
87 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
88
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
89 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
90 mp_image_t *dmpi;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
91 int x, y;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
92
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
93 // hope we'll get DR buffer:
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
94 dmpi=vf_get_image(vf->next,vf->priv->fmt,
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
95 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
96 mpi->w, mpi->h);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
97
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
98 for(y=0; y<mpi->h; y++){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
99 for(x=0; x<mpi->w; x++){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
100 int c= 256*x/mpi->w;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
101 int r=0,g=0,b=0;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
102
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
103 if(3*y<mpi->h) r=c;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
104 else if(3*y<2*mpi->h) g=c;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
105 else b=c;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
106
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
107 put_pixel(dmpi->planes[0], x, y, dmpi->stride[0], r, g, b, vf->priv->fmt);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
108 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
109 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
110
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
111 return vf_next_put_image(vf,dmpi, pts);
11894
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
112 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
113
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
114 //===========================================================================//
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
115
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
116 static int query_format(struct vf_instance_s* vf, unsigned int outfmt){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
117 unsigned int fmt=getfmt(outfmt);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
118 if(!fmt) return 0;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
119 return vf_next_query_format(vf,fmt) & (~VFCAP_CSP_SUPPORTED_BY_HW);
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
120 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
121
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
122 static int open(vf_instance_t *vf, char* args){
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
123 vf->config=config;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
124 vf->put_image=put_image;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
125 vf->query_format=query_format;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
126 vf->priv=malloc(sizeof(struct vf_priv_s));
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
127 return 1;
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
128 }
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
129
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
130 vf_info_t vf_info_rgbtest = {
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
131 "rgbtest",
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
132 "rgbtest",
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
133 "Michael Niedermayer",
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
134 "",
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
135 open,
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
136 NULL
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
137 };
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
138
4c24bad2a86b rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
diff changeset
139 //===========================================================================//