Mercurial > mplayer.hg
annotate libmpdemux/stheader.h @ 30086:f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
and sub "stream headers".
One reason for this is to help avoid/make more obvious things like members with
the same function but different name (extradata vs. codecdata etc.), or members
with the same name but different semantics (pts for audio vs. pts for video).
author | reimar |
---|---|
date | Sun, 27 Dec 2009 14:40:56 +0000 |
parents | d643e4643313 |
children | 081f53690522 |
rev | line source |
---|---|
29238
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
1 /* |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
2 * This file is part of MPlayer. |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
3 * |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
7 * (at your option) any later version. |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
8 * |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
12 * GNU General Public License for more details. |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
13 * |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
17 */ |
d643e4643313
Add standard license header to all files in libmpdemux.
diego
parents:
27807
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_STHEADER_H |
20 #define MPLAYER_STHEADER_H | |
4933 | 21 |
26143
268ecf0e1ba4
Add missing header #includes to fix 'make checkheaders'.
diego
parents:
26082
diff
changeset
|
22 #include "demuxer.h" |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
8965
diff
changeset
|
23 #include "aviheader.h" |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
8965
diff
changeset
|
24 #include "ms_hdr.h" |
7471 | 25 |
26 // Stream headers: | |
4196 | 27 |
30086
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
28 #define SH_COMMON \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
29 demux_stream_t *ds; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
30 struct codecs_st *codec; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
31 unsigned int format; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
32 int initialized; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
33 float stream_delay; /* number of seconds stream should be delayed (according to dwStart or similar) */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
34 /* things needed for parsing */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
35 int needs_parsing; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
36 struct AVCodecContext *avctx; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
37 struct AVCodecParserContext *parser; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
38 /* audio: last known pts value in output from decoder \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
39 * video: predicted/interpolated PTS of the current frame */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
40 double pts; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
41 /* codec-specific: */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
42 void* context; /* codec-specific stuff (usually HANDLE or struct pointer) */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
43 char* lang; /* track language */ \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
44 int default_track; \ |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
45 |
291 | 46 typedef struct { |
30086
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
47 SH_COMMON |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
48 } sh_common_t; |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
49 |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
50 typedef struct { |
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
51 SH_COMMON |
19540 | 52 int aid; |
291 | 53 // output format: |
7467 | 54 int sample_format; |
291 | 55 int samplerate; |
56 int samplesize; | |
57 int channels; | |
746 | 58 int o_bps; // == samplerate*samplesize*channels (uncompr. bytes/sec) |
59 int i_bps; // == bitrate (compressed bytes/sec) | |
296 | 60 // in buffers: |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
61 int audio_in_minsize; // max. compressed packet size (== min. in buffer size) |
291 | 62 char* a_in_buffer; |
63 int a_in_buffer_len; | |
64 int a_in_buffer_size; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
65 // decoder buffers: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
66 int audio_out_minsize; // max. uncompressed packet size (==min. out buffsize) |
296 | 67 char* a_buffer; |
68 int a_buffer_len; | |
69 int a_buffer_size; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
70 // output buffers: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
71 char* a_out_buffer; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
72 int a_out_buffer_len; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
73 int a_out_buffer_size; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
74 // void* audio_out; // the audio_out handle, used for this audio stream |
24891 | 75 struct af_stream_s *afilter; // the audio filter stream |
14819
601e2c8a2922
Remove file-global mpadec, add ad_driver member to sh_audio_t instead.
hzoli
parents:
12341
diff
changeset
|
76 struct ad_functions_s* ad_driver; |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27341
diff
changeset
|
77 #ifdef CONFIG_DYNAMIC_PLUGINS |
8152 | 78 void *dec_handle; |
79 #endif | |
7467 | 80 // win32-compatible codec parameters: |
291 | 81 AVIStreamHeader audio; |
7467 | 82 WAVEFORMATEX* wf; |
83 // codec-specific: | |
84 unsigned char* codecdata; // extra header data passed from demuxer to codec | |
5301 | 85 int codecdata_len; |
18242
caac2ca98168
4 - Implement a better way to calculate current audio pts and use it for
rtognimp
parents:
17643
diff
changeset
|
86 int pts_bytes; // bytes output by decoder after last known pts |
291 | 87 } sh_audio_t; |
88 | |
89 typedef struct { | |
30086
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
90 SH_COMMON |
19540 | 91 int vid; |
8057 | 92 float timer; // absolute time in video stream, since last start/seek |
7467 | 93 // frame counters: |
94 float num_frames; // number of frames played | |
95 int num_frames_decoded; // number of frames decoded | |
8965 | 96 // timing (mostly for mpeg): |
18309
87161f96fa66
Change common pts variables from floats to doubles. Individual demuxers
uau
parents:
18242
diff
changeset
|
97 double i_pts; // PTS for the _next_ I/P frame |
21077 | 98 float next_frame_time; |
99 double last_pts; | |
18917
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18708
diff
changeset
|
100 double buffered_pts[20]; |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18708
diff
changeset
|
101 int num_buffered_pts; |
7467 | 102 // output format: (set by demuxer) |
103 float fps; // frames per second (set only if constant fps) | |
104 float frametime; // 1/fps | |
105 float aspect; // aspect ratio stored in the file (for prescaling) | |
24299
725638f690bb
added .stream_aspect to st_video_t: if non-zero and if not specified otherwise
nicodvb
parents:
23689
diff
changeset
|
106 float stream_aspect; // aspect ratio stored in the media headers (e.g. in DVD IFO files) |
7467 | 107 int i_bps; // == bitrate (compressed bytes/sec) |
108 int disp_w,disp_h; // display size (filled by fileformat parser) | |
109 // output driver/filters: (set by libmpcodecs core) | |
303 | 110 unsigned int outfmtidx; |
24891 | 111 struct vf_instance_s *vfilter; // the video filter chain, used for this video stream |
25962 | 112 int vf_initialized; |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27341
diff
changeset
|
113 #ifdef CONFIG_DYNAMIC_PLUGINS |
8152 | 114 void *dec_handle; |
115 #endif | |
7467 | 116 // win32-compatible codec parameters: |
291 | 117 AVIStreamHeader video; |
7467 | 118 BITMAPINFOHEADER* bih; |
8158 | 119 void* ImageDesc; // for quicktime codecs |
291 | 120 } sh_video_t; |
121 | |
20876
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
122 typedef struct { |
30086
f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents:
29238
diff
changeset
|
123 SH_COMMON |
20876
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
124 int sid; |
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
125 char type; // t = text, v = VobSub, a = SSA/ASS |
25652 | 126 unsigned char* extradata; // extra header data passed from demuxer |
127 int extradata_len; | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26269
diff
changeset
|
128 #ifdef CONFIG_ASS |
20876
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
129 ass_track_t* ass_track; // for SSA/ASS streams (type == 'a') |
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
130 #endif |
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
131 } sh_sub_t; |
0587328d9392
Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents:
20873
diff
changeset
|
132 |
7467 | 133 // demuxer.c: |
19540 | 134 #define new_sh_audio(d, i) new_sh_audio_aid(d, i, i) |
135 sh_audio_t* new_sh_audio_aid(demuxer_t *demuxer,int id,int aid); | |
136 #define new_sh_video(d, i) new_sh_video_vid(d, i, i) | |
137 sh_video_t* new_sh_video_vid(demuxer_t *demuxer,int id,int vid); | |
20873 | 138 #define new_sh_sub(d, i) new_sh_sub_sid(d, i, i) |
139 sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid); | |
18708
9e2b300db17b
Change free_sh_audio() to take demuxer and stream id as parameters
uau
parents:
18309
diff
changeset
|
140 void free_sh_audio(demuxer_t *demuxer, int id); |
5084 | 141 void free_sh_video(sh_video_t *sh); |
426 | 142 |
7467 | 143 // video.c: |
2567 | 144 int video_read_properties(sh_video_t *sh_video); |
145 int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,unsigned char** start,int force_fps); | |
4933 | 146 |
26029 | 147 #endif /* MPLAYER_STHEADER_H */ |