annotate libmpdemux/stheader.h @ 36295:0bd0297b073a

Handle special argument -1 to switch_ratio as intended. Reset to the original aspect ratio that would have been used for the very first rescaling rather than to the display size ratio. This will now handle anamorphic videos correctly as well.
author ib
date Thu, 01 Aug 2013 21:18:14 +0000
parents 8f2167abd6e0
children 4eb54147c488
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25962
diff changeset
19 #ifndef MPLAYER_STHEADER_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25962
diff changeset
20 #define MPLAYER_STHEADER_H
4933
429994672d8c 're-include' possibility
nick
parents: 4875
diff changeset
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
5e56ce70b551 wine headers cleanup
arpi
parents: 7467
diff changeset
25
5e56ce70b551 wine headers cleanup
arpi
parents: 7467
diff changeset
26 // Stream headers:
4196
b75f3bb25261 image field added. 10*10l....
arpi
parents: 3642
diff changeset
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; \
30710
c6524b71a9da cosmetics: Rename "codecs_st" struct to just plain "codecs".
diego
parents: 30643
diff changeset
30 struct codecs *codec; \
30086
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) */ \
30088
4977e04f3a18 Add support for parsing audio streams (though should be easy to extend to video)
reimar
parents: 30087
diff changeset
34 /* things needed for parsing */ \
4977e04f3a18 Add support for parsing audio streams (though should be easy to extend to video)
reimar
parents: 30087
diff changeset
35 int needs_parsing; \
4977e04f3a18 Add support for parsing audio streams (though should be easy to extend to video)
reimar
parents: 30087
diff changeset
36 struct AVCodecContext *avctx; \
4977e04f3a18 Add support for parsing audio streams (though should be easy to extend to video)
reimar
parents: 30087
diff changeset
37 struct AVCodecParserContext *parser; \
30086
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
30643
81099607ec11 Add names to anonymous structs sh_common, sh_audio, sh_video, sh_sub.
diego
parents: 30642
diff changeset
46 typedef struct sh_common {
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
30643
81099607ec11 Add names to anonymous structs sh_common, sh_audio, sh_video, sh_sub.
diego
parents: 30642
diff changeset
50 typedef struct sh_audio {
30086
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
70a5e89ea4cd Get rid of demux_aid_vid_mismatch mess.
reimar
parents: 18917
diff changeset
52 int aid;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
53 // output format:
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
54 int sample_format;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
55 int samplerate;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
56 int samplesize;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
57 int channels;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 587
diff changeset
58 int o_bps; // == samplerate*samplesize*channels (uncompr. bytes/sec)
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 587
diff changeset
59 int i_bps; // == bitrate (compressed bytes/sec)
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
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
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
62 char* a_in_buffer;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
63 int a_in_buffer_len;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
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
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
67 char* a_buffer;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
68 int a_buffer_len;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
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
31180
0d18ce469b67 Drop pointless _s suffix from 'struct af_stream'.
diego
parents: 31174
diff changeset
75 struct af_stream *afilter; // the audio filter stream
31540
7f1c8212e3cf Add some const, the ad_functions structs are in rodata.
reimar
parents: 31180
diff changeset
76 const struct ad_functions *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
4b02f73cb4b9 dlopen() support for ad and vd
alex
parents: 8057
diff changeset
78 void *dec_handle;
4b02f73cb4b9 dlopen() support for ad and vd
alex
parents: 8057
diff changeset
79 #endif
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
80 // win32-compatible codec parameters:
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
81 AVIStreamHeader audio;
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
82 WAVEFORMATEX* wf;
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
83 // codec-specific:
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
84 unsigned char* codecdata; // extra header data passed from demuxer to codec
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5084
diff changeset
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
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
87 } sh_audio_t;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
88
30643
81099607ec11 Add names to anonymous structs sh_common, sh_audio, sh_video, sh_sub.
diego
parents: 30642
diff changeset
89 typedef struct sh_video {
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
70a5e89ea4cd Get rid of demux_aid_vid_mismatch mess.
reimar
parents: 18917
diff changeset
91 int vid;
8057
10698ce4b2a4 fixed comment - noticed by Alex
arpi
parents: 8056
diff changeset
92 float timer; // absolute time in video stream, since last start/seek
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
93 // frame counters:
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
94 float num_frames; // number of frames played
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
95 int num_frames_decoded; // number of frames decoded
8965
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8158
diff changeset
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
7f3cccd16b26 Reorganize code to move more things out of main().
uau
parents: 20876
diff changeset
98 float next_frame_time;
7f3cccd16b26 Reorganize code to move more things out of main().
uau
parents: 20876
diff changeset
99 double last_pts;
33008
6ee39df47be0 Support CrystalHD decoding.
cehoyos
parents: 31925
diff changeset
100 double buffered_pts[32];
18917
d9a75b26da6c Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents: 18708
diff changeset
101 int num_buffered_pts;
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
102 // output format: (set by demuxer)
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
103 float fps; // frames per second (set only if constant fps)
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
104 float frametime; // 1/fps
36295
0bd0297b073a Handle special argument -1 to switch_ratio as intended.
ib
parents: 34313
diff changeset
105 float aspect; // current aspect ratio (for prescaling)
0bd0297b073a Handle special argument -1 to switch_ratio as intended.
ib
parents: 34313
diff changeset
106 float original_aspect; // original aspect ratio stored in the file
24299
725638f690bb added .stream_aspect to st_video_t: if non-zero and if not specified otherwise
nicodvb
parents: 23689
diff changeset
107 float stream_aspect; // aspect ratio stored in the media headers (e.g. in DVD IFO files)
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
108 int i_bps; // == bitrate (compressed bytes/sec)
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
109 int disp_w,disp_h; // display size (filled by fileformat parser)
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
110 // output driver/filters: (set by libmpcodecs core)
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
111 unsigned int outfmtidx;
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30088
diff changeset
112 struct vf_instance *vfilter; // the video filter chain, used for this video stream
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25652
diff changeset
113 int vf_initialized;
27397
d47744b95b78 Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents: 27341
diff changeset
114 #ifdef CONFIG_DYNAMIC_PLUGINS
8152
4b02f73cb4b9 dlopen() support for ad and vd
alex
parents: 8057
diff changeset
115 void *dec_handle;
4b02f73cb4b9 dlopen() support for ad and vd
alex
parents: 8057
diff changeset
116 #endif
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
117 // win32-compatible codec parameters:
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
118 AVIStreamHeader video;
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
119 BITMAPINFOHEADER* bih;
34313
8f2167abd6e0 Try harder to extract a sensible palette from extradata.
reimar
parents: 33008
diff changeset
120 int bih_size;
8158
bffdd162d034 export imagedescription for qt video codecs
arpi
parents: 8152
diff changeset
121 void* ImageDesc; // for quicktime codecs
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
122 } sh_video_t;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
123
30643
81099607ec11 Add names to anonymous structs sh_common, sh_audio, sh_video, sh_sub.
diego
parents: 30642
diff changeset
124 typedef struct sh_sub {
30086
f72ea7a67421 Introduce a sh_common struct that contains the parts in common by the audio, video
reimar
parents: 29238
diff changeset
125 SH_COMMON
20876
0587328d9392 Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents: 20873
diff changeset
126 int sid;
0587328d9392 Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents: 20873
diff changeset
127 char type; // t = text, v = VobSub, a = SSA/ASS
25652
6e25dda14b62 Add extradata to sh_sub_t.
eugeni
parents: 25535
diff changeset
128 unsigned char* extradata; // extra header data passed from demuxer
6e25dda14b62 Add extradata to sh_sub_t.
eugeni
parents: 25535
diff changeset
129 int extradata_len;
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26269
diff changeset
130 #ifdef CONFIG_ASS
31792
55dacfca4a43 Rename libass types to match upstream libass >= 0.9.7
greg
parents: 31609
diff changeset
131 ASS_Track* ass_track; // for SSA/ASS streams (type == 'a')
20876
0587328d9392 Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents: 20873
diff changeset
132 #endif
0587328d9392 Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents: 20873
diff changeset
133 } sh_sub_t;
0587328d9392 Move sh_sub_t to stheader.h, where all the other sh structs are defined
reimar
parents: 20873
diff changeset
134
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
135 // demuxer.c:
31609
cd81fce1f010 Make the stream language an argument to the stream creation function
reimar
parents: 31540
diff changeset
136 #define new_sh_audio(d, i, l) new_sh_audio_aid(d, i, i, l)
cd81fce1f010 Make the stream language an argument to the stream creation function
reimar
parents: 31540
diff changeset
137 sh_audio_t* new_sh_audio_aid(demuxer_t *demuxer,int id,int aid, const char *lang);
19540
70a5e89ea4cd Get rid of demux_aid_vid_mismatch mess.
reimar
parents: 18917
diff changeset
138 #define new_sh_video(d, i) new_sh_video_vid(d, i, i)
70a5e89ea4cd Get rid of demux_aid_vid_mismatch mess.
reimar
parents: 18917
diff changeset
139 sh_video_t* new_sh_video_vid(demuxer_t *demuxer,int id,int vid);
31609
cd81fce1f010 Make the stream language an argument to the stream creation function
reimar
parents: 31540
diff changeset
140 #define new_sh_sub(d, i, l) new_sh_sub_sid(d, i, i, l)
cd81fce1f010 Make the stream language an argument to the stream creation function
reimar
parents: 31540
diff changeset
141 sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid, const char *lang);
18708
9e2b300db17b Change free_sh_audio() to take demuxer and stream id as parameters
uau
parents: 18309
diff changeset
142 void free_sh_audio(demuxer_t *demuxer, int id);
5084
2fd327bf64fc added get_sh_video/audio and realmedia seeking
alex
parents: 4973
diff changeset
143 void free_sh_video(sh_video_t *sh);
426
26e513f392b2 new stream selection code
arpi_esp
parents: 399
diff changeset
144
31925
616375aefdda Print subtitle type also for internally-supported types with a libavcodec decoder.
reimar
parents: 31792
diff changeset
145 const char *sh_sub_type2str(int type);
616375aefdda Print subtitle type also for internally-supported types with a libavcodec decoder.
reimar
parents: 31792
diff changeset
146
7467
3a22c16fea46 - cosmetics, reorder
arpi
parents: 7232
diff changeset
147 // video.c:
2567
ea6158be8103 video frame reading cleanup
arpi
parents: 2341
diff changeset
148 int video_read_properties(sh_video_t *sh_video);
ea6158be8103 video frame reading cleanup
arpi
parents: 2341
diff changeset
149 int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,unsigned char** start,int force_fps);
4933
429994672d8c 're-include' possibility
nick
parents: 4875
diff changeset
150
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25962
diff changeset
151 #endif /* MPLAYER_STHEADER_H */