[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