Commit fa5dc0c5 authored by Francois Cartegnie's avatar Francois Cartegnie

demux: libmp4: add support for index prefixed atom list

parent 2cc05f7d
......@@ -191,15 +191,15 @@ static int MP4_NextBox( stream_t *p_stream, MP4_Box_t *p_box )
* after called one of theses functions, file position is unknown
* you need to call MP4_GotoBox to go where you want
*****************************************************************************/
int MP4_ReadBoxContainerChildren( stream_t *p_stream,
MP4_Box_t *p_container, uint32_t i_last_child )
static int MP4_ReadBoxContainerChildrenIndexed( stream_t *p_stream,
MP4_Box_t *p_container, uint32_t i_last_child, bool b_indexed )
{
MP4_Box_t *p_box;
/* Size of root container is set to 0 when unknown, for exemple
* with a DASH stream. In that case, we skip the following check */
if( p_container->i_size
&& ( stream_Tell( p_stream ) + 8 >
&& ( stream_Tell( p_stream ) + ((b_indexed)?16:8) >
(off_t)(p_container->i_pos + p_container->i_size) )
)
{
......@@ -209,7 +209,16 @@ int MP4_ReadBoxContainerChildren( stream_t *p_stream,
do
{
uint32_t i_index = 0;
if ( b_indexed )
{
uint8_t read[8];
if ( stream_Read( p_stream, read, 8 ) < 8 )
return 0;
i_index = GetDWBE(&read[4]);
}
if( ( p_box = MP4_ReadBox( p_stream, p_container ) ) == NULL ) break;
p_box->i_index = i_index;
/* chain this box with the father and the other at same level */
if( !p_container->p_first ) p_container->p_first = p_box;
......@@ -227,6 +236,13 @@ int MP4_ReadBoxContainerChildren( stream_t *p_stream,
return 1;
}
int MP4_ReadBoxContainerChildren( stream_t *p_stream, MP4_Box_t *p_container,
uint32_t i_last_child )
{
return MP4_ReadBoxContainerChildrenIndexed( p_stream, p_container,
i_last_child, false );
}
static int MP4_ReadBoxContainerRaw( stream_t *p_stream, MP4_Box_t *p_container )
{
return MP4_ReadBoxContainerChildren( p_stream, p_container, 0 );
......
......@@ -1446,6 +1446,7 @@ struct MP4_Box_s
uint32_t i_type;
uint32_t i_shortsize;
uint32_t i_handler; /**/
uint32_t i_index; /* indexed list (ilst) */
enum
{
......
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