Mercurial > mplayer.hg
annotate libmpdemux/nuppelvideo.h @ 28677:cd9aa9b2533a
ffvc1vdpau and ffwmv3vdpau should be marked as buggy in the same
way as the software decoders, otherwise they will be preferred over
the software decoders which just breaks things when using e.g. xv vo.
author | reimar |
---|---|
date | Mon, 23 Feb 2009 11:48:45 +0000 |
parents | e67b783d7289 |
children | 4edc04d82a47 |
rev | line source |
---|---|
27192
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
1 /* |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
2 nuppelvideo.h taken from NuppelVideo, by |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
3 (c) Roman Hochleitner roman@mars.tuwien.ac.at |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
4 |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
5 This program is free software; you can redistribute it and/or modify |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
7 the Free Software Foundation; either version 2 of the License, or |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
8 (at your option) any later version. |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
9 |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
13 GNU General Public License for more details. |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
14 |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
16 along with this program; if not, write to the Free Software |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
e67b783d7289
Add standard license header for NuppelVideo, i.e. GPL v2+.
diego
parents:
26029
diff
changeset
|
18 */ |
3807 | 19 |
26029 | 20 #ifndef MPLAYER_NUPPELVIDEO_H |
21 #define MPLAYER_NUPPELVIDEO_H | |
25553
6ac1ece1f9fe
Add multiple inclusion guards to all header files that lack them.
diego
parents:
21347
diff
changeset
|
22 |
21347
2d5ad5048952
Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents:
16164
diff
changeset
|
23 #include "libavutil/intfloat_readwrite.h" |
2d5ad5048952
Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents:
16164
diff
changeset
|
24 |
15568
6825cbde2df6
Specify the padding instead of expecting the compiler to align correctly
reimar
parents:
14896
diff
changeset
|
25 typedef struct __attribute__((packed)) rtfileheader |
3807 | 26 { |
27 char finfo[12]; // "NuppelVideo" + \0 | |
28 char version[5]; // "0.05" + \0 | |
15568
6825cbde2df6
Specify the padding instead of expecting the compiler to align correctly
reimar
parents:
14896
diff
changeset
|
29 char pad1[3]; |
3807 | 30 int width; |
31 int height; | |
32 int desiredwidth; // 0 .. as it is | |
33 int desiredheight; // 0 .. as it is | |
34 char pimode; // P .. progressive | |
35 // I .. interlaced (2 half pics) [NI] | |
15568
6825cbde2df6
Specify the padding instead of expecting the compiler to align correctly
reimar
parents:
14896
diff
changeset
|
36 char pad2[3]; |
3807 | 37 double aspect; // 1.0 .. square pixel (1.5 .. e.g. width=480: width*1.5=720 |
38 // for capturing for svcd material | |
39 double fps; | |
40 int videoblocks; // count of video-blocks -1 .. unknown 0 .. no video | |
41 int audioblocks; // count of audio-blocks -1 .. unknown 0 .. no audio | |
42 int textsblocks; // count of text-blocks -1 .. unknown 0 .. no text | |
43 int keyframedist; | |
44 } rtfileheader; | |
45 | |
15568
6825cbde2df6
Specify the padding instead of expecting the compiler to align correctly
reimar
parents:
14896
diff
changeset
|
46 typedef struct __attribute__((packed)) rtframeheader |
3807 | 47 { |
48 char frametype; // A .. Audio, V .. Video, S .. Sync, T .. Text | |
49 // R .. Seekpoint: String RTjjjjjjjj (use full packet) | |
50 // D .. Addition Data for Compressors | |
51 // ct: R .. RTjpeg Tables | |
52 | |
53 char comptype; // V: 0 .. Uncompressed [NI] | |
54 // 1 .. RTJpeg | |
55 // 2 .. RTJpeg with lzo afterwards | |
56 // N .. black frame | |
57 // L .. simply copy last frame (if lost frames) | |
58 // A: 0 .. Uncompressed (44100/sec 16bit 2ch) | |
59 // 1 .. lzo compression [NI] | |
60 // 2 .. layer2 (packet) [NI] | |
61 // 3 .. layer3 (packet) [NI] | |
62 // F .. flac (lossless) [NI] | |
63 // S .. shorten (lossless) [NI] | |
64 // N .. null frame loudless | |
65 // L .. simply copy last frame (may sound bad) NI | |
66 // S: B .. Audio and Video sync point [NI] | |
67 // A .. Audio Sync Information | |
68 // timecode == effective dsp-frequency*100 | |
69 // when reaching this audio sync point | |
70 // because many cheap soundcards are unexact | |
71 // and have a range from 44000 to 44250 | |
72 // instead of the expected exact 44100 S./sec | |
73 // V .. Next Video Sync | |
74 // timecode == next video framenumber | |
75 // S .. Audio,Video,Text Correlation [NI] | |
76 char keyframe; // 0 .. keyframe | |
77 // 1 .. nr of frame in gop => no keyframe | |
78 | |
79 char filters; // Every bit stands for one type of filter | |
80 // 1 .. Gauss 5 Pixel (8*m+2*l+2*r+2*a+2*b)/16 [NYI] | |
81 // 2 .. Gauss 5 Pixel (8*m+1*l+1*r+1*a+1*b)/12 [NYI] | |
82 // 4 .. Cartoon Filter [NI] | |
83 // 8 .. Reserverd Filter [NI] | |
84 // 16 .. Reserverd Filter [NI] | |
85 // 32 .. Reserverd Filter [NI] | |
86 // 64 .. Reserverd Filter [NI] | |
87 // 128 .. Reserverd Filter [NI] | |
88 | |
89 int timecode; // Timecodeinformation sec*1000 + msecs | |
90 | |
91 int packetlength; // V,A,T: length of following data in stream | |
92 // S: length of packet correl. information [NI] | |
93 // R: do not use here! (fixed 'RTjjjjjjjjjjjjjj') | |
94 } rtframeheader; | |
95 | |
16164
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
96 /* for MythTV */ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
97 typedef struct __attribute__((packed)) extendeddata |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
98 { |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
99 int version; // yes, this is repeated from the file header |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
100 int video_fourcc; // video encoding method used |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
101 int audio_fourcc; // audio encoding method used |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
102 // generic data |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
103 int audio_sample_rate; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
104 int audio_bits_per_sample; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
105 int audio_channels; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
106 // codec specific |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
107 // mp3lame |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
108 int audio_compression_ratio; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
109 int audio_quality; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
110 // rtjpeg |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
111 int rtjpeg_quality; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
112 int rtjpeg_luma_filter; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
113 int rtjpeg_chroma_filter; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
114 // libavcodec |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
115 int lavc_bitrate; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
116 int lavc_qmin; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
117 int lavc_qmax; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
118 int lavc_maxqdiff; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
119 // unused for later -- total size of 128 integers. |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
120 // new fields must be added at the end, above this comment. |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
121 int expansion[113]; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
122 } extendeddata; |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
123 |
3807 | 124 #define FRAMEHEADERSIZE sizeof(rtframeheader) |
125 #define FILEHEADERSIZE sizeof(rtfileheader) | |
126 | |
127 typedef struct vidbuffertype | |
128 { | |
129 int sample; | |
130 int timecode; | |
131 int freeToEncode; | |
132 int freeToBuffer; | |
133 unsigned char *buffer_offset; | |
134 } vidbuffertyp; | |
135 | |
136 typedef struct audbuffertype | |
137 { | |
138 int sample; | |
139 int timecode; | |
140 int freeToEncode; | |
141 int freeToBuffer; | |
142 unsigned char *buffer_offset; | |
143 } audbuffertyp; | |
144 | |
14896
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
145 #define le2me_rtfileheader(h) { \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
146 (h)->width = le2me_32((h)->width); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
147 (h)->height = le2me_32((h)->height); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
148 (h)->desiredwidth = le2me_32((h)->desiredwidth); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
149 (h)->desiredheight = le2me_32((h)->desiredheight); \ |
21347
2d5ad5048952
Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents:
16164
diff
changeset
|
150 (h)->aspect = av_int2dbl(le2me_64(*(uint64_t *)&(h)->aspect));\ |
2d5ad5048952
Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents:
16164
diff
changeset
|
151 (h)->fps = av_int2dbl(le2me_64(*(uint64_t *)&(h)->fps)); \ |
14896
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
152 (h)->videoblocks = le2me_32((h)->videoblocks); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
153 (h)->audioblocks = le2me_32((h)->audioblocks); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
154 (h)->textsblocks = le2me_32((h)->textsblocks); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
155 (h)->keyframedist = le2me_32((h)->keyframedist); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
156 } |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
157 #define le2me_rtframeheader(h) { \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
158 (h)->timecode = le2me_32((h)->timecode); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
159 (h)->packetlength = le2me_32((h)->packetlength); \ |
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
160 } |
16164
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
161 #define le2me_extendeddata(h) { \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
162 (h)->version = le2me_32((h)->version); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
163 (h)->video_fourcc = le2me_32((h)->video_fourcc); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
164 (h)->audio_fourcc = le2me_32((h)->audio_fourcc); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
165 (h)->audio_sample_rate = le2me_32((h)->audio_sample_rate); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
166 (h)->audio_bits_per_sample = le2me_32((h)->audio_bits_per_sample);\ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
167 (h)->audio_channels = le2me_32((h)->audio_channels); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
168 (h)->audio_compression_ratio = le2me_32((h)->audio_compression_ratio);\ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
169 (h)->audio_quality = le2me_32((h)->audio_quality); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
170 (h)->rtjpeg_quality = le2me_32((h)->rtjpeg_quality); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
171 (h)->rtjpeg_luma_filter = le2me_32((h)->rtjpeg_luma_filter); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
172 (h)->rtjpeg_chroma_filter = le2me_32((h)->rtjpeg_chroma_filter);\ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
173 (h)->lavc_bitrate = le2me_32((h)->lavc_bitrate); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
174 (h)->lavc_qmin = le2me_32((h)->lavc_qmin); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
175 (h)->lavc_qmax = le2me_32((h)->lavc_qmax); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
176 (h)->lavc_maxqdiff = le2me_32((h)->lavc_maxqdiff); \ |
ec76d55a25f1
Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents:
15976
diff
changeset
|
177 } |
14896
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
3807
diff
changeset
|
178 |
26029 | 179 #endif /* MPLAYER_NUPPELVIDEO_H */ |