Commit 51ca37a8 authored by Frédéric Yhuel's avatar Frédéric Yhuel Committed by 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: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent baff262e
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#ifndef _VLC_MP4_H #ifndef _VLC_MP4_H
#define _VLC_MP4_H 1 #define _VLC_MP4_H 1
#include <vlc_es.h>
#define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' ) #define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' )
#define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' ) #define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' )
...@@ -1225,6 +1227,96 @@ typedef struct MP4_Box_s ...@@ -1225,6 +1227,96 @@ typedef struct MP4_Box_s
} MP4_Box_t; } 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 ) static inline size_t mp4_box_headersize( MP4_Box_t *p_box )
{ {
return 8 return 8
......
...@@ -62,84 +62,6 @@ static int DemuxRef( demux_t *p_demux ){ (void)p_demux; return 0;} ...@@ -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 Seek ( demux_t *, mtime_t );
static int Control ( demux_t *, int, va_list ); 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 struct demux_sys_t
{ {
MP4_Box_t *p_root; /* container for the whole file */ MP4_Box_t *p_root; /* container for the whole file */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment