vlc | branch: master | Frédéric Yhuel <[email protected]> | Wed Apr 11 17:24:41 2012 +0200| [51ca37a8ab2d7c9bc4c58dcb390f6f098081fdb0] | committer: Jean-Baptiste Kempf
demux/mp4: move some stuff in the header file I need to include mp4_track_t definition in my Smooth Streaming module Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=51ca37a8ab2d7c9bc4c58dcb390f6f098081fdb0 --- modules/demux/mp4/libmp4.h | 92 ++++++++++++++++++++++++++++++++++++++++++++ modules/demux/mp4/mp4.c | 78 ------------------------------------- 2 files changed, 92 insertions(+), 78 deletions(-) diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h index 86fc0fc..9a93f34 100644 --- a/modules/demux/mp4/libmp4.h +++ b/modules/demux/mp4/libmp4.h @@ -23,6 +23,8 @@ #ifndef _VLC_MP4_H #define _VLC_MP4_H 1 +#include <vlc_es.h> + #define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' ) #define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' ) @@ -1225,6 +1227,96 @@ typedef struct MP4_Box_s } MP4_Box_t; +/* Contain all information about a chunk */ +typedef struct +{ + uint64_t i_offset; /* absolute position of this chunk in the file */ + uint32_t i_sample_description_index; /* index for SampleEntry to use */ + uint32_t i_sample_count; /* how many samples in this chunk */ + uint32_t i_sample_first; /* index of the first sample in this chunk */ + uint32_t i_sample; /* index of the next sample to read in this chunk */ + + /* now provide way to calculate pts, dts, and offset without too + much memory and with fast access */ + + /* with this we can calculate dts/pts without waste memory */ + uint64_t i_first_dts; /* DTS of the first sample */ + uint64_t i_last_dts; /* DTS of the last sample */ + uint32_t *p_sample_count_dts; + uint32_t *p_sample_delta_dts; /* dts delta */ + + uint32_t *p_sample_count_pts; + int32_t *p_sample_offset_pts; /* pts-dts */ + + uint8_t **p_sample_data; /* set when b_fragmented is true */ + uint32_t *p_sample_size; + /* TODO if needed add pts + but quickly *add* support for edts and seeking */ + +} mp4_chunk_t; + + /* Contain all needed information for read all track with vlc */ +typedef struct +{ + unsigned int i_track_ID;/* this should be unique */ + + int b_ok; /* The track is usable */ + int b_enable; /* is the trak enable by default */ + bool b_selected; /* is the trak being played */ + bool b_chapter; /* True when used for chapter only */ + + bool b_mac_encoding; + + es_format_t fmt; + es_out_id_t *p_es; + + /* display size only ! */ + int i_width; + int i_height; + float f_rotation; + + /* more internal data */ + uint64_t i_timescale; /* time scale for this track only */ + uint16_t current_qid; /* Smooth Streaming quality level ID */ + + /* elst */ + int i_elst; /* current elst */ + int64_t i_elst_time; /* current elst start time (in movie time scale)*/ + MP4_Box_t *p_elst; /* elst (could be NULL) */ + + /* give the next sample to read, i_chunk is to find quickly where + the sample is located */ + uint32_t i_sample; /* next sample to read */ + uint32_t i_chunk; /* chunk where next sample is stored */ + /* total count of chunk and sample */ + uint32_t i_chunk_count; + uint32_t i_sample_count; + + mp4_chunk_t *chunk; /* always defined for each chunk */ + mp4_chunk_t *cchunk; /* current chunk if b_fragmented is true */ + + /* sample size, p_sample_size defined only if i_sample_size == 0 + else i_sample_size is size for all sample */ + uint32_t i_sample_size; + uint32_t *p_sample_size; /* XXX perhaps add file offset if take + too much time to do sumations each time*/ + + uint32_t i_sample_first; /* i_sample_first value + of the next chunk */ + uint64_t i_first_dts; /* i_first_dts value + of the next chunk */ + + MP4_Box_t *p_stbl; /* will contain all timing information */ + MP4_Box_t *p_stsd; /* will contain all data to initialize decoder */ + MP4_Box_t *p_sample;/* point on actual sdsd */ + + bool b_drms; + bool b_end_of_chunk; + void *p_drms; + MP4_Box_t *p_skcr; + +} mp4_track_t; + static inline size_t mp4_box_headersize( MP4_Box_t *p_box ) { return 8 diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index 8faba8e..3f7c7cb 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -62,84 +62,6 @@ static int DemuxRef( demux_t *p_demux ){ (void)p_demux; return 0;} static int Seek ( demux_t *, mtime_t ); static int Control ( demux_t *, int, va_list ); -/* Contain all information about a chunk */ -typedef struct -{ - uint64_t i_offset; /* absolute position of this chunk in the file */ - uint32_t i_sample_description_index; /* index for SampleEntry to use */ - uint32_t i_sample_count; /* how many samples in this chunk */ - uint32_t i_sample_first; /* index of the first sample in this chunk */ - - /* now provide way to calculate pts, dts, and offset without too - much memory and with fast access */ - - /* with this we can calculate dts/pts without waste memory */ - uint64_t i_first_dts; /* DTS of the first sample */ - uint64_t i_last_dts; /* DTS of the last sample */ - uint32_t *p_sample_count_dts; - uint32_t *p_sample_delta_dts; /* dts delta */ - - uint32_t *p_sample_count_pts; - int32_t *p_sample_offset_pts; /* pts-dts */ - - /* TODO if needed add pts - but quickly *add* support for edts and seeking */ - -} mp4_chunk_t; - - /* Contain all needed information for read all track with vlc */ -typedef struct -{ - unsigned int i_track_ID;/* this should be unique */ - - int b_ok; /* The track is usable */ - int b_enable; /* is the trak enable by default */ - bool b_selected; /* is the trak being played */ - bool b_chapter; /* True when used for chapter only */ - - bool b_mac_encoding; - - es_format_t fmt; - es_out_id_t *p_es; - - /* display size only ! */ - int i_width; - int i_height; - float f_rotation; - - /* more internal data */ - uint64_t i_timescale; /* time scale for this track only */ - - /* elst */ - int i_elst; /* current elst */ - int64_t i_elst_time; /* current elst start time (in movie time scale)*/ - MP4_Box_t *p_elst; /* elst (could be NULL) */ - - /* give the next sample to read, i_chunk is to find quickly where - the sample is located */ - uint32_t i_sample; /* next sample to read */ - uint32_t i_chunk; /* chunk where next sample is stored */ - /* total count of chunk and sample */ - uint32_t i_chunk_count; - uint32_t i_sample_count; - - mp4_chunk_t *chunk; /* always defined for each chunk */ - - /* sample size, p_sample_size defined only if i_sample_size == 0 - else i_sample_size is size for all sample */ - uint32_t i_sample_size; - uint32_t *p_sample_size; /* XXX perhaps add file offset if take - too much time to do sumations each time*/ - - MP4_Box_t *p_stbl; /* will contain all timing information */ - MP4_Box_t *p_stsd; /* will contain all data to initialize decoder */ - MP4_Box_t *p_sample;/* point on actual sdsd */ - - MP4_Box_t *p_skcr; - -} mp4_track_t; - - struct demux_sys_t { MP4_Box_t *p_root; /* container for the whole file */ _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
