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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
19 #ifndef MPLAYER_MP_IMAGE_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
20 #define MPLAYER_MP_IMAGE_H
4185
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
26 //--------- codec's requirements (filled by the codec/vf) ---------
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
27
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
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
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
31 // set if buffer content will be READ.
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
32 // This can be e.g. for next frame's MC: (I/P mpeg frames) -
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
33 // then in combination with MP_IMGFLAG_PRESERVE - or it
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
34 // can be because a video filter or codec will read a significant
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
35 // amount of data while processing that frame (e.g. blending something
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
36 // onto the frame, MV based intra prediction).
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
37 // A frame marked like this should not be placed in to uncachable
b371a630600c Update description of MP_IMGFLAG_READABLE.
reimar
parents: 34174
diff changeset
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
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
40
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
41 //--- buffer width/stride/plane restrictions: (used for direct rendering)
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
42 // stride _have_to_ be aligned to MB boundary: [for DR restrictions]
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
43 #define MP_IMGFLAG_ACCEPT_ALIGNED_STRIDE 0x4
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
44 // stride should be aligned to MB boundary: [for buffer allocation]
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
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
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
48 // codec accept any width (width*bpp=stride -> stride%bpp==0) (>=width):
4962
993f274191ff ACCEPT_WIDTH flag added
arpi
parents: 4933
diff changeset
49 #define MP_IMGFLAG_ACCEPT_WIDTH 0x20
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
50 //--- for planar formats only:
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
51 // uses only stride[0], and stride[1]=stride[2]=stride[0]>>mpi->chroma_x_shift
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
52 #define MP_IMGFLAG_COMMON_STRIDE 0x40
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
53 // uses only planes[0], and calculates planes[1,2] from width,height,imgfmt
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
54 #define MP_IMGFLAG_COMMON_PLANE 0x80
4185
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
55
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
56 #define MP_IMGFLAGMASK_RESTRICTIONS 0xFF
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
57
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
58 //--------- color info (filled by mp_image_setfmt() ) -----------
4185
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
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
5cb79ad246f2 Support mp_image with allocated palette.
reimar
parents: 28956
diff changeset
65 // set if you want memory for palette allocated and managed by vf_get_image etc.
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
66 #define MP_IMGFLAG_RGB_PALETTE 0x800
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
67
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
68 #define MP_IMGFLAGMASK_COLORS 0xF00
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
69
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
70 // codec uses drawing/rendering callbacks (draw_slice()-like thing, DR method 2)
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
71 // [the codec will set this flag if it supports callbacks, and the vo _may_
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
72 // clear it in get_image() if draw_slice() not implemented]
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
73 #define MP_IMGFLAG_DRAW_CALLBACK 0x1000
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
74 // set if it's in video buffer/memory: [set by vo/vf's get_image() !!!]
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
75 #define MP_IMGFLAG_DIRECT 0x2000
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
76 // set if buffer is allocated (used in destination images):
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
77 #define MP_IMGFLAG_ALLOCATED 0x4000
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
78
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
79 // buffer type was printed (do NOT set this flag - it's for INTERNAL USE!!!)
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 6863
diff changeset
80 #define MP_IMGFLAG_TYPE_DISPLAYED 0x8000
4185
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
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
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
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
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
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
2b390c08ed07 Improve correct-pts with PAFF streams.
cehoyos
parents: 31173
diff changeset
95 // Doesn't need any buffer, incomplete image (probably a first field only)
2b390c08ed07 Improve correct-pts with PAFF streams.
cehoyos
parents: 31173
diff changeset
96 // we need this type to be able to differentiate between half frames and
2b390c08ed07 Improve correct-pts with PAFF streams.
cehoyos
parents: 31173
diff changeset
97 // all other cases
2b390c08ed07 Improve correct-pts with PAFF streams.
cehoyos
parents: 31173
diff changeset
98 #define MP_IMGTYPE_INCOMPLETE 6
4186
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
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
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
102 #define MP_IMGFIELD_ORDERED 0x01
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
103 #define MP_IMGFIELD_TOP_FIRST 0x02
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
104 #define MP_IMGFIELD_REPEAT_FIRST 0x04
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
105 #define MP_IMGFIELD_TOP 0x08
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
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
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
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
f5c38da17b59 bpp != depth
arpi
parents: 4185
diff changeset
113 unsigned char bpp; // bits/pixel. NOT depth! for RGB it will be n*8
4185
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
114 unsigned int imgfmt;
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
115 int width,height; // stored dimensions
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
711159267b2d clean up field flags:
rfelker
parents: 10510
diff changeset
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
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
133 } mp_image_t;
85c90bb8729a initial stuff. comments welcomed...
arpi
parents:
diff changeset
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
de47aebf654c filters uninit
arpi
parents: 5609
diff changeset
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
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
143 #endif /* MPLAYER_MP_IMAGE_H */