summaryrefslogtreecommitdiffstats
path: root/demux/stheader.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-05 17:02:04 +0100
committerwm4 <wm4@nowhere>2012-11-12 20:06:14 +0100
commitd4bdd0473d6f43132257c9fb3848d829755167a3 (patch)
tree8021c2f7da1841393c8c832105e20cd527826d6c /demux/stheader.h
parentbd48deba77bd5582c5829d6fe73a7d2571088aba (diff)
downloadmpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.bz2
mpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.xz
Rename directories, move files (step 1 of 2) (does not compile)
Tis drops the silly lib prefixes, and attempts to organize the tree in a more logical way. Make the top-level directory less cluttered as well. Renames the following directories: libaf -> audio/filter libao2 -> audio/out libvo -> video/out libmpdemux -> demux Split libmpcodecs: vf* -> video/filter vd*, dec_video.* -> video/decode mp_image*, img_format*, ... -> video/ ad*, dec_audio.* -> audio/decode libaf/format.* is moved to audio/ - this is similar to how mp_image.* is located in video/. Move most top-level .c/.h files to core. (talloc.c/.h is left on top- level, because it's external.) Park some of the more annoying files in compat/. Some of these are relicts from the time mplayer used ffmpeg internals. sub/ is not split, because it's too much of a mess (subtitle code is mixed with OSD display and rendering). Maybe the organization of core is not ideal: it mixes playback core (like mplayer.c) and utility helpers (like bstr.c/h). Should the need arise, the playback core will be moved somewhere else, while core contains all helper and common code.
Diffstat (limited to 'demux/stheader.h')
-rw-r--r--demux/stheader.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/demux/stheader.h b/demux/stheader.h
new file mode 100644
index 0000000000..b5f11c0ecc
--- /dev/null
+++ b/demux/stheader.h
@@ -0,0 +1,195 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_STHEADER_H
+#define MPLAYER_STHEADER_H
+
+#include <stdbool.h>
+
+#include "aviheader.h"
+#include "ms_hdr.h"
+struct MPOpts;
+struct demuxer;
+
+enum stream_type {
+ STREAM_VIDEO,
+ STREAM_AUDIO,
+ STREAM_SUB,
+ STREAM_TYPE_COUNT,
+};
+
+// Stream headers:
+
+struct sh_stream {
+ enum stream_type type;
+ struct demuxer *demuxer;
+ // Index into demuxer->streams.
+ int index;
+ // The (possibly) type specific id, e.g. aid or sid.
+ int tid;
+ // Index into stream array (currently one array per type, e.g. a_streams).
+ int stream_index;
+ // Demuxer specific ID (always set, defaults to tid).
+ int demuxer_id;
+ // Abomination.
+ struct sh_common *common_header;
+ // One of these is non-NULL, the others are NULL, depending on the stream
+ // type.
+ struct sh_audio *audio;
+ struct sh_video *video;
+ struct sh_sub *sub;
+
+ // Work around other hacks.
+ int lavf_codec_tag;
+
+ char *title;
+ bool default_track;
+
+ // shouldn't exist type of stuff
+ struct MPOpts *opts;
+};
+
+
+#define SH_COMMON \
+ struct sh_stream *gsh; \
+ const char *demuxer_codecname; \
+ struct MPOpts *opts; \
+ struct demux_stream *ds; \
+ struct codecs *codec; \
+ unsigned int format; \
+ int libav_codec_id; \
+ int initialized; \
+ /* number of seconds stream should be delayed \
+ * (according to dwStart or similar) */ \
+ float stream_delay; \
+ /* things needed for parsing */ \
+ bool needs_parsing; \
+ struct AVCodecContext *avctx; \
+ struct AVCodecParserContext *parser; \
+ /* audio: last known pts value in output from decoder \
+ * video: predicted/interpolated PTS of the current frame */ \
+ double pts; \
+ /* decoder context */ \
+ void *context; \
+ const char *codecname; \
+ char *lang; /* track language */ \
+
+typedef struct sh_common {
+ SH_COMMON
+} sh_common_t;
+
+typedef struct sh_audio {
+ SH_COMMON
+ int aid;
+ // output format:
+ int sample_format;
+ int samplerate;
+ int container_out_samplerate;
+ int samplesize;
+ int channels;
+ int o_bps; // == samplerate*samplesize*channels (uncompr. bytes/sec)
+ int i_bps; // == bitrate (compressed bytes/sec)
+ // in buffers:
+ int audio_in_minsize; // initial size to allocate for a_in_buffer if any
+ char *a_in_buffer; // input buffer used by some decoders
+ int a_in_buffer_len;
+ int a_in_buffer_size;
+ // decoder buffers:
+ int audio_out_minsize; // minimal output from decoder may be this much
+ char *a_buffer; // buffer for decoder output
+ int a_buffer_len;
+ int a_buffer_size;
+ struct af_stream *afilter; // the audio filter stream
+ const struct ad_functions *ad_driver;
+ // win32-compatible codec parameters:
+ AVIStreamHeader audio;
+ WAVEFORMATEX *wf;
+ // note codec extradata may be either under "wf" or "codecdata"
+ unsigned char *codecdata;
+ int codecdata_len;
+ int pts_bytes; // bytes output by decoder after last known pts
+} sh_audio_t;
+
+typedef struct sh_video {
+ SH_COMMON
+ int vid;
+ float timer; // absolute time in video stream, since last start/seek
+ // frame counters:
+ float num_frames; // number of frames played
+ int num_frames_decoded; // number of frames decoded
+ double i_pts; // PTS for the _next_ I/P frame (internal mpeg demuxing)
+ float next_frame_time;
+ double last_pts;
+ double buffered_pts[32];
+ int num_buffered_pts;
+ double codec_reordered_pts;
+ double prev_codec_reordered_pts;
+ int num_reordered_pts_problems;
+ double sorted_pts;
+ double prev_sorted_pts;
+ int num_sorted_pts_problems;
+ int pts_assoc_mode;
+ // output format: (set by demuxer)
+ float fps; // frames per second (set only if constant fps)
+ float frametime; // 1/fps
+ float aspect; // aspect ratio stored in the file (for prescaling)
+ float stream_aspect; // aspect ratio in media headers (DVD IFO files)
+ int i_bps; // == bitrate (compressed bytes/sec)
+ int disp_w, disp_h; // display size (filled by demuxer)
+ int colorspace; // mp_csp
+ int color_range; // mp_csp_levels
+ // output driver/filters: (set by libmpcodecs core)
+ unsigned int outfmt;
+ unsigned int outfmtidx;
+ struct vf_instance *vfilter; // video filter chain
+ int output_flags; // query_format() results for output filters+vo
+ const struct vd_functions *vd_driver;
+ int vf_initialized; // -1 failed, 0 not done, 1 done
+ // win32-compatible codec parameters:
+ AVIStreamHeader video;
+ BITMAPINFOHEADER *bih;
+} sh_video_t;
+
+typedef struct sh_sub {
+ SH_COMMON
+ int sid;
+ char type; // t = text, v = VobSub, a = SSA/ASS, m, x, b, d, p
+ bool active; // after track switch decoder may stay initialized, not active
+ unsigned char *extradata; // extra header data passed from demuxer
+ int extradata_len;
+ const struct sd_functions *sd_driver;
+} sh_sub_t;
+
+// demuxer.c:
+#define new_sh_audio(d, i) new_sh_audio_aid(d, i, i)
+struct sh_audio *new_sh_audio_aid(struct demuxer *demuxer, int id, int aid);
+#define new_sh_video(d, i) new_sh_video_vid(d, i, i)
+struct sh_video *new_sh_video_vid(struct demuxer *demuxer, int id, int vid);
+#define new_sh_sub(d, i) new_sh_sub_sid(d, i, i)
+struct sh_sub *new_sh_sub_sid(struct demuxer *demuxer, int id, int sid);
+struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid,
+ const char *lang);
+
+const char *sh_sub_type2str(int type);
+
+// video.c:
+int video_read_properties(struct sh_video *sh_video);
+int video_read_frame(struct sh_video *sh_video, float *frame_time_ptr,
+ unsigned char **start, int force_fps);
+
+#endif /* MPLAYER_STHEADER_H */