annotate libmpdemux/nuppelvideo.h @ 26733:99458e732ebd

Add detection code for abnormal pts jump when seeking previous. This patch make the vobsub works more accurately according to the requested pts.
author ulion
date Wed, 14 May 2008 03:43:45 +0000
parents 4129c8cfa742
children e67b783d7289
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3807
alex
parents:
diff changeset
1 /* nuppelvideo.h rh */
alex
parents:
diff changeset
2
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25553
diff changeset
3 #ifndef MPLAYER_NUPPELVIDEO_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25553
diff changeset
4 #define MPLAYER_NUPPELVIDEO_H
25553
6ac1ece1f9fe Add multiple inclusion guards to all header files that lack them.
diego
parents: 21347
diff changeset
5
21347
2d5ad5048952 Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents: 16164
diff changeset
6 #include "libavutil/intfloat_readwrite.h"
2d5ad5048952 Use av_int2dbl to read doubles instead of our somewhat broken le2me_dbl
reimar
parents: 16164
diff changeset
7
15568
6825cbde2df6 Specify the padding instead of expecting the compiler to align correctly
reimar
parents: 14896
diff changeset
8 typedef struct __attribute__((packed)) rtfileheader
3807
alex
parents:
diff changeset
9 {
alex
parents:
diff changeset
10 char finfo[12]; // "NuppelVideo" + \0
alex
parents:
diff changeset
11 char version[5]; // "0.05" + \0
15568
6825cbde2df6 Specify the padding instead of expecting the compiler to align correctly
reimar
parents: 14896
diff changeset
12 char pad1[3];
3807
alex
parents:
diff changeset
13 int width;
alex
parents:
diff changeset
14 int height;
alex
parents:
diff changeset
15 int desiredwidth; // 0 .. as it is
alex
parents:
diff changeset
16 int desiredheight; // 0 .. as it is
alex
parents:
diff changeset
17 char pimode; // P .. progressive
alex
parents:
diff changeset
18 // I .. interlaced (2 half pics) [NI]
15568
6825cbde2df6 Specify the padding instead of expecting the compiler to align correctly
reimar
parents: 14896
diff changeset
19 char pad2[3];
3807
alex
parents:
diff changeset
20 double aspect; // 1.0 .. square pixel (1.5 .. e.g. width=480: width*1.5=720
alex
parents:
diff changeset
21 // for capturing for svcd material
alex
parents:
diff changeset
22 double fps;
alex
parents:
diff changeset
23 int videoblocks; // count of video-blocks -1 .. unknown 0 .. no video
alex
parents:
diff changeset
24 int audioblocks; // count of audio-blocks -1 .. unknown 0 .. no audio
alex
parents:
diff changeset
25 int textsblocks; // count of text-blocks -1 .. unknown 0 .. no text
alex
parents:
diff changeset
26 int keyframedist;
alex
parents:
diff changeset
27 } rtfileheader;
alex
parents:
diff changeset
28
15568
6825cbde2df6 Specify the padding instead of expecting the compiler to align correctly
reimar
parents: 14896
diff changeset
29 typedef struct __attribute__((packed)) rtframeheader
3807
alex
parents:
diff changeset
30 {
alex
parents:
diff changeset
31 char frametype; // A .. Audio, V .. Video, S .. Sync, T .. Text
alex
parents:
diff changeset
32 // R .. Seekpoint: String RTjjjjjjjj (use full packet)
alex
parents:
diff changeset
33 // D .. Addition Data for Compressors
alex
parents:
diff changeset
34 // ct: R .. RTjpeg Tables
alex
parents:
diff changeset
35
alex
parents:
diff changeset
36 char comptype; // V: 0 .. Uncompressed [NI]
alex
parents:
diff changeset
37 // 1 .. RTJpeg
alex
parents:
diff changeset
38 // 2 .. RTJpeg with lzo afterwards
alex
parents:
diff changeset
39 // N .. black frame
alex
parents:
diff changeset
40 // L .. simply copy last frame (if lost frames)
alex
parents:
diff changeset
41 // A: 0 .. Uncompressed (44100/sec 16bit 2ch)
alex
parents:
diff changeset
42 // 1 .. lzo compression [NI]
alex
parents:
diff changeset
43 // 2 .. layer2 (packet) [NI]
alex
parents:
diff changeset
44 // 3 .. layer3 (packet) [NI]
alex
parents:
diff changeset
45 // F .. flac (lossless) [NI]
alex
parents:
diff changeset
46 // S .. shorten (lossless) [NI]
alex
parents:
diff changeset
47 // N .. null frame loudless
alex
parents:
diff changeset
48 // L .. simply copy last frame (may sound bad) NI
alex
parents:
diff changeset
49 // S: B .. Audio and Video sync point [NI]
alex
parents:
diff changeset
50 // A .. Audio Sync Information
alex
parents:
diff changeset
51 // timecode == effective dsp-frequency*100
alex
parents:
diff changeset
52 // when reaching this audio sync point
alex
parents:
diff changeset
53 // because many cheap soundcards are unexact
alex
parents:
diff changeset
54 // and have a range from 44000 to 44250
alex
parents:
diff changeset
55 // instead of the expected exact 44100 S./sec
alex
parents:
diff changeset
56 // V .. Next Video Sync
alex
parents:
diff changeset
57 // timecode == next video framenumber
alex
parents:
diff changeset
58 // S .. Audio,Video,Text Correlation [NI]
alex
parents:
diff changeset
59 char keyframe; // 0 .. keyframe
alex
parents:
diff changeset
60 // 1 .. nr of frame in gop => no keyframe
alex
parents:
diff changeset
61
alex
parents:
diff changeset
62 char filters; // Every bit stands for one type of filter
alex
parents:
diff changeset
63 // 1 .. Gauss 5 Pixel (8*m+2*l+2*r+2*a+2*b)/16 [NYI]
alex
parents:
diff changeset
64 // 2 .. Gauss 5 Pixel (8*m+1*l+1*r+1*a+1*b)/12 [NYI]
alex
parents:
diff changeset
65 // 4 .. Cartoon Filter [NI]
alex
parents:
diff changeset
66 // 8 .. Reserverd Filter [NI]
alex
parents:
diff changeset
67 // 16 .. Reserverd Filter [NI]
alex
parents:
diff changeset
68 // 32 .. Reserverd Filter [NI]
alex
parents:
diff changeset
69 // 64 .. Reserverd Filter [NI]
alex
parents:
diff changeset
70 // 128 .. Reserverd Filter [NI]
alex
parents:
diff changeset
71
alex
parents:
diff changeset
72 int timecode; // Timecodeinformation sec*1000 + msecs
alex
parents:
diff changeset
73
alex
parents:
diff changeset
74 int packetlength; // V,A,T: length of following data in stream
alex
parents:
diff changeset
75 // S: length of packet correl. information [NI]
alex
parents:
diff changeset
76 // R: do not use here! (fixed 'RTjjjjjjjjjjjjjj')
alex
parents:
diff changeset
77 } rtframeheader;
alex
parents:
diff changeset
78
16164
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
79 /* for MythTV */
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
80 typedef struct __attribute__((packed)) extendeddata
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
81 {
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
82 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
83 int video_fourcc; // video encoding method used
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
84 int audio_fourcc; // audio encoding method used
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
85 // generic data
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
86 int audio_sample_rate;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
87 int audio_bits_per_sample;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
88 int audio_channels;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
89 // codec specific
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
90 // mp3lame
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
91 int audio_compression_ratio;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
92 int audio_quality;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
93 // rtjpeg
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
94 int rtjpeg_quality;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
95 int rtjpeg_luma_filter;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
96 int rtjpeg_chroma_filter;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
97 // libavcodec
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
98 int lavc_bitrate;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
99 int lavc_qmin;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
100 int lavc_qmax;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
101 int lavc_maxqdiff;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
102 // unused for later -- total size of 128 integers.
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
103 // 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
104 int expansion[113];
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
105 } extendeddata;
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
106
3807
alex
parents:
diff changeset
107 #define FRAMEHEADERSIZE sizeof(rtframeheader)
alex
parents:
diff changeset
108 #define FILEHEADERSIZE sizeof(rtfileheader)
alex
parents:
diff changeset
109
alex
parents:
diff changeset
110 typedef struct vidbuffertype
alex
parents:
diff changeset
111 {
alex
parents:
diff changeset
112 int sample;
alex
parents:
diff changeset
113 int timecode;
alex
parents:
diff changeset
114 int freeToEncode;
alex
parents:
diff changeset
115 int freeToBuffer;
alex
parents:
diff changeset
116 unsigned char *buffer_offset;
alex
parents:
diff changeset
117 } vidbuffertyp;
alex
parents:
diff changeset
118
alex
parents:
diff changeset
119 typedef struct audbuffertype
alex
parents:
diff changeset
120 {
alex
parents:
diff changeset
121 int sample;
alex
parents:
diff changeset
122 int timecode;
alex
parents:
diff changeset
123 int freeToEncode;
alex
parents:
diff changeset
124 int freeToBuffer;
alex
parents:
diff changeset
125 unsigned char *buffer_offset;
alex
parents:
diff changeset
126 } audbuffertyp;
alex
parents:
diff changeset
127
14896
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 3807
diff changeset
128 #define le2me_rtfileheader(h) { \
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 3807
diff changeset
129 (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
130 (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
131 (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
132 (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
133 (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
134 (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
135 (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
136 (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
137 (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
138 (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
139 }
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 3807
diff changeset
140 #define le2me_rtframeheader(h) { \
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 3807
diff changeset
141 (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
142 (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
143 }
16164
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
144 #define le2me_extendeddata(h) { \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
145 (h)->version = le2me_32((h)->version); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
146 (h)->video_fourcc = le2me_32((h)->video_fourcc); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
147 (h)->audio_fourcc = le2me_32((h)->audio_fourcc); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
148 (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
149 (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
150 (h)->audio_channels = le2me_32((h)->audio_channels); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
151 (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
152 (h)->audio_quality = le2me_32((h)->audio_quality); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
153 (h)->rtjpeg_quality = le2me_32((h)->rtjpeg_quality); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
154 (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
155 (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
156 (h)->lavc_bitrate = le2me_32((h)->lavc_bitrate); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
157 (h)->lavc_qmin = le2me_32((h)->lavc_qmin); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
158 (h)->lavc_qmax = le2me_32((h)->lavc_qmax); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
159 (h)->lavc_maxqdiff = le2me_32((h)->lavc_maxqdiff); \
ec76d55a25f1 Support more MythTV nuv files, based on Gentoo portage patch
reimar
parents: 15976
diff changeset
160 }
14896
9ddae5897422 Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents: 3807
diff changeset
161
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25553
diff changeset
162 #endif /* MPLAYER_NUPPELVIDEO_H */