Mercurial > mplayer.hg
annotate libmpcodecs/mp_image.h @ 36215:4eb27365d0b0
Add hack to fix compilation issues on OSX with broken libiconv.
Such a hack is not really a good solution, but since the
issue is relatively common it seems worth it for the moment.
author | reimar |
---|---|
date | Sun, 09 Jun 2013 13:54:47 +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 */ |