[vlc-devel] [PATCH 2/3] demux/mp4: move some stuff in the header file
Frédéric Yhuel
fyhuel at viotech.net
Wed Apr 11 17:24:41 CEST 2012
I need to include mp4_track_t definition in my Smooth Streaming module
---
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 47525b3..21f2609 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' )
@@ -1223,6 +1225,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 */
--
1.7.5.4
More information about the vlc-devel
mailing list