Mercurial > mplayer.hg
annotate libmpcodecs/mp_image.h @ 35811:2ce01f3d3b37
Switch from OpenGL.h to gl.h
The former seems to miss some needed defines
from OSX 10.8 on, and gl.h seems to work
without issues at the very least down to 10.5
author | reimar |
---|---|
date | Sun, 27 Jan 2013 15:33:31 +0000 |
parents | b371a630600c |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_MP_IMAGE_H |
20 #define MPLAYER_MP_IMAGE_H | |
4185 | 21 |
26147
41652035483c
Add necessary header #includes to fix 'make checkheaders'.
diego
parents:
26029
diff
changeset
|
22 #include <stdio.h> |
41652035483c
Add necessary header #includes to fix 'make checkheaders'.
diego
parents:
26029
diff
changeset
|
23 #include <stdlib.h> |
41652035483c
Add necessary header #includes to fix 'make checkheaders'.
diego
parents:
26029
diff
changeset
|
24 #include <string.h> |
41652035483c
Add necessary header #includes to fix 'make checkheaders'.
diego
parents:
26029
diff
changeset
|
25 |
6875 | 26 //--------- codec's requirements (filled by the codec/vf) --------- |
27 | |
28 //--- buffer content restrictions: | |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
29 // set if buffer content shouldn't be modified: |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
30 #define MP_IMGFLAG_PRESERVE 0x01 |
35056 | 31 // set if buffer content will be READ. |
32 // This can be e.g. for next frame's MC: (I/P mpeg frames) - | |
33 // then in combination with MP_IMGFLAG_PRESERVE - or it | |
34 // can be because a video filter or codec will read a significant | |
35 // amount of data while processing that frame (e.g. blending something | |
36 // onto the frame, MV based intra prediction). | |
37 // A frame marked like this should not be placed in to uncachable | |
38 // video RAM for example. | |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
39 #define MP_IMGFLAG_READABLE 0x02 |
6875 | 40 |
41 //--- buffer width/stride/plane restrictions: (used for direct rendering) | |
42 // stride _have_to_ be aligned to MB boundary: [for DR restrictions] | |
43 #define MP_IMGFLAG_ACCEPT_ALIGNED_STRIDE 0x4 | |
44 // stride should be aligned to MB boundary: [for buffer allocation] | |
45 #define MP_IMGFLAG_PREFER_ALIGNED_STRIDE 0x8 | |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
46 // codec accept any stride (>=width): |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
47 #define MP_IMGFLAG_ACCEPT_STRIDE 0x10 |
6875 | 48 // codec accept any width (width*bpp=stride -> stride%bpp==0) (>=width): |
4962 | 49 #define MP_IMGFLAG_ACCEPT_WIDTH 0x20 |
6875 | 50 //--- for planar formats only: |
51 // uses only stride[0], and stride[1]=stride[2]=stride[0]>>mpi->chroma_x_shift | |
52 #define MP_IMGFLAG_COMMON_STRIDE 0x40 | |
53 // uses only planes[0], and calculates planes[1,2] from width,height,imgfmt | |
54 #define MP_IMGFLAG_COMMON_PLANE 0x80 | |
4185 | 55 |
6875 | 56 #define MP_IMGFLAGMASK_RESTRICTIONS 0xFF |
57 | |
58 //--------- color info (filled by mp_image_setfmt() ) ----------- | |
4185 | 59 // set if number of planes > 1 |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
60 #define MP_IMGFLAG_PLANAR 0x100 |
4185 | 61 // set if it's YUV colorspace |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
62 #define MP_IMGFLAG_YUV 0x200 |
6875 | 63 // set if it's swapped (BGR or YVU) plane/byteorder |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
64 #define MP_IMGFLAG_SWAPPED 0x400 |
30074 | 65 // set if you want memory for palette allocated and managed by vf_get_image etc. |
6875 | 66 #define MP_IMGFLAG_RGB_PALETTE 0x800 |
67 | |
68 #define MP_IMGFLAGMASK_COLORS 0xF00 | |
69 | |
70 // codec uses drawing/rendering callbacks (draw_slice()-like thing, DR method 2) | |
71 // [the codec will set this flag if it supports callbacks, and the vo _may_ | |
72 // clear it in get_image() if draw_slice() not implemented] | |
73 #define MP_IMGFLAG_DRAW_CALLBACK 0x1000 | |
74 // set if it's in video buffer/memory: [set by vo/vf's get_image() !!!] | |
75 #define MP_IMGFLAG_DIRECT 0x2000 | |
76 // set if buffer is allocated (used in destination images): | |
77 #define MP_IMGFLAG_ALLOCATED 0x4000 | |
78 | |
79 // buffer type was printed (do NOT set this flag - it's for INTERNAL USE!!!) | |
80 #define MP_IMGFLAG_TYPE_DISPLAYED 0x8000 | |
4185 | 81 |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
82 // codec doesn't support any form of direct rendering - it has own buffer |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
83 // allocation. so we just export its buffer pointers: |
4186 | 84 #define MP_IMGTYPE_EXPORT 0 |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
85 // codec requires a static WO buffer, but it does only partial updates later: |
4186 | 86 #define MP_IMGTYPE_STATIC 1 |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
87 // codec just needs some WO memory, where it writes/copies the whole frame to: |
4186 | 88 #define MP_IMGTYPE_TEMP 2 |
4877
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
89 // I+P type, requires 2+ independent static R/W buffers |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
90 #define MP_IMGTYPE_IP 3 |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
91 // I+P+B type, requires 2+ independent static R/W and 1+ temp WO buffers |
9d97874d8691
new flags added for direct rendering (libmpcodecs core)
arpi
parents:
4187
diff
changeset
|
92 #define MP_IMGTYPE_IPB 4 |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
26147
diff
changeset
|
93 // Upper 16 bits give desired buffer number, -1 means get next available |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
26147
diff
changeset
|
94 #define MP_IMGTYPE_NUMBERED 5 |
31953 | 95 // Doesn't need any buffer, incomplete image (probably a first field only) |
96 // we need this type to be able to differentiate between half frames and | |
97 // all other cases | |
98 #define MP_IMGTYPE_INCOMPLETE 6 | |
4186 | 99 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31953
diff
changeset
|
100 #define MP_MAX_PLANES 4 |
6538
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
101 |
10663 | 102 #define MP_IMGFIELD_ORDERED 0x01 |
103 #define MP_IMGFIELD_TOP_FIRST 0x02 | |
104 #define MP_IMGFIELD_REPEAT_FIRST 0x04 | |
105 #define MP_IMGFIELD_TOP 0x08 | |
106 #define MP_IMGFIELD_BOTTOM 0x10 | |
11669
bcf9862f61b2
set top_field first for lavc decoding and add MP_IMGFIELD_INTERLACED
michael
parents:
11386
diff
changeset
|
107 #define MP_IMGFIELD_INTERLACED 0x20 |
10510
73b3e4336cd4
Add mpeg2_flags to mp_image_t, copy flags in vd_libmpeg2.c,
ranma
parents:
10316
diff
changeset
|
108 |
31173
b35751576d17
cosmetics: Drop pointless _s suffix from 'struct mp_image'.
diego
parents:
30996
diff
changeset
|
109 typedef struct mp_image { |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
26147
diff
changeset
|
110 unsigned int flags; |
4186 | 111 unsigned char type; |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
26147
diff
changeset
|
112 int number; |
4186 | 113 unsigned char bpp; // bits/pixel. NOT depth! for RGB it will be n*8 |
4185 | 114 unsigned int imgfmt; |
115 int width,height; // stored dimensions | |
116 int x,y,w,h; // visible dimensions | |
6538
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
117 unsigned char* planes[MP_MAX_PLANES]; |
14792
6c12ee26fab9
stride must be signed! otherwise negative stride is broken on 64bit systems
rfelker
parents:
11669
diff
changeset
|
118 int stride[MP_MAX_PLANES]; |
7984
a57c1fc0c2fc
change qscale type to int8 and fix qscale ordering
michael
parents:
7957
diff
changeset
|
119 char * qscale; |
4185 | 120 int qstride; |
7957
31fd09cc9ba2
passing picture_type (might be usefull for postprocessing)
michael
parents:
6911
diff
changeset
|
121 int pict_type; // 0->unknown, 1->I, 2->P, 3->B |
10663 | 122 int fields; |
9925
420640a0f6d0
passing qscale_type around so the pp code can fix the mpeg2 <<1 thing
michael
parents:
9171
diff
changeset
|
123 int qscale_type; // 0->mpeg1/4/h263, 1->mpeg2 |
6538
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
124 int num_planes; |
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
125 /* these are only used by planar formats Y,U(Cb),V(Cr) */ |
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
126 int chroma_width; |
afb4f3c107e7
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6525
diff
changeset
|
127 int chroma_height; |
6539
79b536a37e40
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6538
diff
changeset
|
128 int chroma_x_shift; // horizontal |
79b536a37e40
better planar support, chroma subsampling support and Y8/Y800 support
alex
parents:
6538
diff
changeset
|
129 int chroma_y_shift; // vertical |
28956
6d0da4fd4544
Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents:
28518
diff
changeset
|
130 int usage_count; |
6759
415be01747ae
added 'priv' field to mpi - requires for tracking frames with different
arpi
parents:
6707
diff
changeset
|
131 /* for private use by filter or vo driver (to store buffer id or dmpi) */ |
415be01747ae
added 'priv' field to mpi - requires for tracking frames with different
arpi
parents:
6707
diff
changeset
|
132 void* priv; |
4185 | 133 } mp_image_t; |
134 | |
30996
6e9ece21c004
Move functions that really do not need to be inlined from the header
reimar
parents:
30702
diff
changeset
|
135 void mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt); |
6e9ece21c004
Move functions that really do not need to be inlined from the header
reimar
parents:
30702
diff
changeset
|
136 mp_image_t* new_mp_image(int w,int h); |
6e9ece21c004
Move functions that really do not need to be inlined from the header
reimar
parents:
30702
diff
changeset
|
137 void free_mp_image(mp_image_t* mpi); |
5737 | 138 |
23994
8572d2ef5263
Move alloc_mpi and copy_mpi from libmenu/vf_menu.c to libmpcodecs/mp_image.c.
cehoyos
parents:
23689
diff
changeset
|
139 mp_image_t* alloc_mpi(int w, int h, unsigned long int fmt); |
30115
ad61464d02a7
Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents:
30110
diff
changeset
|
140 void mp_image_alloc_planes(mp_image_t *mpi); |
23994
8572d2ef5263
Move alloc_mpi and copy_mpi from libmenu/vf_menu.c to libmpcodecs/mp_image.c.
cehoyos
parents:
23689
diff
changeset
|
141 void copy_mpi(mp_image_t *dmpi, mp_image_t *mpi); |
8572d2ef5263
Move alloc_mpi and copy_mpi from libmenu/vf_menu.c to libmpcodecs/mp_image.c.
cehoyos
parents:
23689
diff
changeset
|
142 |
26029 | 143 #endif /* MPLAYER_MP_IMAGE_H */ |