diff options
author | wm4 <wm4@nowhere> | 2012-11-05 17:02:04 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-11-12 20:06:14 +0100 |
commit | d4bdd0473d6f43132257c9fb3848d829755167a3 (patch) | |
tree | 8021c2f7da1841393c8c832105e20cd527826d6c /demux/stheader.h | |
parent | bd48deba77bd5582c5829d6fe73a7d2571088aba (diff) | |
download | mpv-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.h | 195 |
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 */ |