Mercurial > mplayer.hg
annotate libmpdemux/stheader.h @ 13738:39004f891def
seeking based on the largest timestamp in an mpeg stream
It is often more accurate than the current seeking and it has the
additional benefit of giving the (almost) precise total time of the movie.
patch by Michael Behrisch < behrisch at informatik.hu-berlin.de >
author | aurel |
---|---|
date | Sat, 23 Oct 2004 00:05:38 +0000 |
parents | 0db4a3a5b01d |
children | 601e2c8a2922 |
rev | line source |
---|---|
4933 | 1 #ifndef __ST_HEADER_H |
2 #define __ST_HEADER_H 1 | |
3 | |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
8965
diff
changeset
|
4 #include "aviheader.h" |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
8965
diff
changeset
|
5 #include "ms_hdr.h" |
7471 | 6 |
7 // Stream headers: | |
4196 | 8 |
291 | 9 typedef struct { |
10 demux_stream_t *ds; | |
7467 | 11 struct codecs_st *codec; |
303 | 12 unsigned int format; |
1656 | 13 int inited; |
8057 | 14 float delay; // relative (to sh_video->timer) time in audio stream |
291 | 15 // output format: |
7467 | 16 int sample_format; |
291 | 17 int samplerate; |
18 int samplesize; | |
19 int channels; | |
746 | 20 int o_bps; // == samplerate*samplesize*channels (uncompr. bytes/sec) |
21 int i_bps; // == bitrate (compressed bytes/sec) | |
296 | 22 // in buffers: |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
23 int audio_in_minsize; // max. compressed packet size (== min. in buffer size) |
291 | 24 char* a_in_buffer; |
25 int a_in_buffer_len; | |
26 int a_in_buffer_size; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
27 // decoder buffers: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
28 int audio_out_minsize; // max. uncompressed packet size (==min. out buffsize) |
296 | 29 char* a_buffer; |
30 int a_buffer_len; | |
31 int a_buffer_size; | |
7604
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
32 // output buffers: |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
33 char* a_out_buffer; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
34 int a_out_buffer_len; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
35 int a_out_buffer_size; |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
36 // void* audio_out; // the audio_out handle, used for this audio stream |
32efb806436e
aufio filter layer (libaf) integration to libmpcodecs, mplayer and mencoder
arpi
parents:
7471
diff
changeset
|
37 void* afilter; // the audio filter stream |
8152 | 38 #ifdef DYNAMIC_PLUGINS |
39 void *dec_handle; | |
40 #endif | |
7467 | 41 // win32-compatible codec parameters: |
291 | 42 AVIStreamHeader audio; |
7467 | 43 WAVEFORMATEX* wf; |
44 // codec-specific: | |
3642
2cef9d562af0
void* context added - it should keep the codec-specific stuff (struct ptr or HANDLE)
arpi
parents:
2567
diff
changeset
|
45 void* context; // codec-specific stuff (usually HANDLE or struct pointer) |
7467 | 46 unsigned char* codecdata; // extra header data passed from demuxer to codec |
5301 | 47 int codecdata_len; |
291 | 48 } sh_audio_t; |
49 | |
50 typedef struct { | |
51 demux_stream_t *ds; | |
7467 | 52 struct codecs_st *codec; |
303 | 53 unsigned int format; |
1656 | 54 int inited; |
8057 | 55 float timer; // absolute time in video stream, since last start/seek |
7467 | 56 // frame counters: |
57 float num_frames; // number of frames played | |
58 int num_frames_decoded; // number of frames decoded | |
8965 | 59 // timing (mostly for mpeg): |
60 float pts; // predicted/interpolated PTS of the current frame | |
61 float i_pts; // PTS for the _next_ I/P frame | |
7467 | 62 // output format: (set by demuxer) |
63 float fps; // frames per second (set only if constant fps) | |
64 float frametime; // 1/fps | |
65 float aspect; // aspect ratio stored in the file (for prescaling) | |
66 int i_bps; // == bitrate (compressed bytes/sec) | |
67 int disp_w,disp_h; // display size (filled by fileformat parser) | |
68 // output driver/filters: (set by libmpcodecs core) | |
303 | 69 unsigned int outfmtidx; |
7467 | 70 void* video_out; // the video_out handle, used for this video stream |
71 void* vfilter; // the video filter chain, used for this video stream | |
72 int vf_inited; | |
8152 | 73 #ifdef DYNAMIC_PLUGINS |
74 void *dec_handle; | |
75 #endif | |
7467 | 76 // win32-compatible codec parameters: |
291 | 77 AVIStreamHeader video; |
7467 | 78 BITMAPINFOHEADER* bih; |
8158 | 79 void* ImageDesc; // for quicktime codecs |
7467 | 80 // codec-specific: |
81 void* context; // codec-specific stuff (usually HANDLE or struct pointer) | |
291 | 82 } sh_video_t; |
83 | |
7467 | 84 // demuxer.c: |
1289 | 85 sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id); |
86 sh_video_t* new_sh_video(demuxer_t *demuxer,int id); | |
5084 | 87 void free_sh_audio(sh_audio_t *sh); |
88 void free_sh_video(sh_video_t *sh); | |
426 | 89 |
7467 | 90 // video.c: |
2567 | 91 int video_read_properties(sh_video_t *sh_video); |
92 int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,unsigned char** start,int force_fps); | |
4933 | 93 |
94 #endif |