⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libmp4.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 5 页
字号:
    MP4_GET2BYTES( p_box->data.p_sample_text->i_foreground_color[0] );    MP4_GET2BYTES( p_box->data.p_sample_text->i_foreground_color[1] );    MP4_GET2BYTES( p_box->data.p_sample_text->i_foreground_color[2] );    MP4_GET1BYTE( i );    p_box->data.p_sample_text->psz_text_name = malloc( i + 1 );    memcpy( p_box->data.p_sample_text->psz_text_name, p_peek, i );    p_box->data.p_sample_text->psz_text_name[i] = '\0';#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"text\" in stsd text name=%s",             p_box->data.p_sample_text->psz_text_name );#endif    MP4_READBOX_EXIT( 1 );}#if 0/* We can't easily call it, and anyway ~ 20 bytes lost isn't a real problem */static void MP4_FreeBox_sample_text( MP4_Box_t *p_box ){    FREE( p_box->data.p_sample_text->psz_text_name );}#endifstatic int MP4_ReadBox_stsd( stream_t *p_stream, MP4_Box_t *p_box ){    MP4_READBOX_ENTER( MP4_Box_data_stsd_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stsd );    MP4_GET4BYTES( p_box->data.p_stsd->i_entry_count );    stream_Seek( p_stream, p_box->i_pos + MP4_BOX_HEADERSIZE( p_box ) + 8 );    MP4_ReadBoxContainerRaw( p_stream, p_box );#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stsd\" entry-count %d",                      p_box->data.p_stsd->i_entry_count );#endif    MP4_READBOX_EXIT( 1 );}static int MP4_ReadBox_stsz( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_stsz_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stsz );    MP4_GET4BYTES( p_box->data.p_stsz->i_sample_size );    MP4_GET4BYTES( p_box->data.p_stsz->i_sample_count );    p_box->data.p_stsz->i_entry_size =        calloc( sizeof( uint32_t ), p_box->data.p_stsz->i_sample_count );    if( !p_box->data.p_stsz->i_sample_size )    {        for( i=0; (i<p_box->data.p_stsz->i_sample_count)&&(i_read >= 4 ); i++ )        {            MP4_GET4BYTES( p_box->data.p_stsz->i_entry_size[i] );        }    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stsz\" sample-size %d sample-count %d",                      p_box->data.p_stsz->i_sample_size,                      p_box->data.p_stsz->i_sample_count );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stsz( MP4_Box_t *p_box ){    FREE( p_box->data.p_stsz->i_entry_size );}static int MP4_ReadBox_stsc( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_stsc_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stsc );    MP4_GET4BYTES( p_box->data.p_stsc->i_entry_count );    p_box->data.p_stsc->i_first_chunk =        calloc( sizeof( uint32_t ), p_box->data.p_stsc->i_entry_count );    p_box->data.p_stsc->i_samples_per_chunk =        calloc( sizeof( uint32_t ), p_box->data.p_stsc->i_entry_count );    p_box->data.p_stsc->i_sample_description_index =        calloc( sizeof( uint32_t ), p_box->data.p_stsc->i_entry_count );    for( i = 0; (i < p_box->data.p_stsc->i_entry_count )&&( i_read >= 12 );i++ )    {        MP4_GET4BYTES( p_box->data.p_stsc->i_first_chunk[i] );        MP4_GET4BYTES( p_box->data.p_stsc->i_samples_per_chunk[i] );        MP4_GET4BYTES( p_box->data.p_stsc->i_sample_description_index[i] );    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stsc\" entry-count %d",                      p_box->data.p_stsc->i_entry_count );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stsc( MP4_Box_t *p_box ){    FREE( p_box->data.p_stsc->i_first_chunk );    FREE( p_box->data.p_stsc->i_samples_per_chunk );    FREE( p_box->data.p_stsc->i_sample_description_index );}static int MP4_ReadBox_stco_co64( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_co64_t );    MP4_GETVERSIONFLAGS( p_box->data.p_co64 );    MP4_GET4BYTES( p_box->data.p_co64->i_entry_count );    p_box->data.p_co64->i_chunk_offset =        calloc( sizeof( uint64_t ), p_box->data.p_co64->i_entry_count );    for( i = 0; i < p_box->data.p_co64->i_entry_count; i++ )    {        if( p_box->i_type == FOURCC_stco )        {            if( i_read < 4 )            {                break;            }            MP4_GET4BYTES( p_box->data.p_co64->i_chunk_offset[i] );        }        else        {            if( i_read < 8 )            {                break;            }            MP4_GET8BYTES( p_box->data.p_co64->i_chunk_offset[i] );        }    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"co64\" entry-count %d",                      p_box->data.p_co64->i_entry_count );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stco_co64( MP4_Box_t *p_box ){    FREE( p_box->data.p_co64->i_chunk_offset );}static int MP4_ReadBox_stss( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_stss_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stss );    MP4_GET4BYTES( p_box->data.p_stss->i_entry_count );    p_box->data.p_stss->i_sample_number =        calloc( sizeof( uint32_t ), p_box->data.p_stss->i_entry_count );    for( i = 0; (i < p_box->data.p_stss->i_entry_count )&&( i_read >= 4 ); i++ )    {        MP4_GET4BYTES( p_box->data.p_stss->i_sample_number[i] );        /* XXX in libmp4 sample begin at 0 */        p_box->data.p_stss->i_sample_number[i]--;    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stss\" entry-count %d",                      p_box->data.p_stss->i_entry_count );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stss( MP4_Box_t *p_box ){    FREE( p_box->data.p_stss->i_sample_number )}static int MP4_ReadBox_stsh( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_stsh_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stsh );    MP4_GET4BYTES( p_box->data.p_stsh->i_entry_count );    p_box->data.p_stsh->i_shadowed_sample_number =        calloc( sizeof( uint32_t ), p_box->data.p_stsh->i_entry_count );    p_box->data.p_stsh->i_sync_sample_number =        calloc( sizeof( uint32_t ), p_box->data.p_stsh->i_entry_count );    for( i = 0; (i < p_box->data.p_stss->i_entry_count )&&( i_read >= 8 ); i++ )    {        MP4_GET4BYTES( p_box->data.p_stsh->i_shadowed_sample_number[i] );        MP4_GET4BYTES( p_box->data.p_stsh->i_sync_sample_number[i] );    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stsh\" entry-count %d",                      p_box->data.p_stsh->i_entry_count );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stsh( MP4_Box_t *p_box ){    FREE( p_box->data.p_stsh->i_shadowed_sample_number )    FREE( p_box->data.p_stsh->i_sync_sample_number )}static int MP4_ReadBox_stdp( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_stdp_t );    MP4_GETVERSIONFLAGS( p_box->data.p_stdp );    p_box->data.p_stdp->i_priority =        calloc( sizeof( uint16_t ), i_read / 2 );    for( i = 0; i < i_read / 2 ; i++ )    {        MP4_GET2BYTES( p_box->data.p_stdp->i_priority[i] );    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stdp\" entry-count "I64Fd,                      i_read / 2 );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_stdp( MP4_Box_t *p_box ){    FREE( p_box->data.p_stdp->i_priority )}static int MP4_ReadBox_padb( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_padb_t );    MP4_GETVERSIONFLAGS( p_box->data.p_padb );    MP4_GET4BYTES( p_box->data.p_padb->i_sample_count );    p_box->data.p_padb->i_reserved1 =        calloc( sizeof( uint16_t ), ( p_box->data.p_padb->i_sample_count + 1 ) / 2 );    p_box->data.p_padb->i_pad2 =        calloc( sizeof( uint16_t ), ( p_box->data.p_padb->i_sample_count + 1 ) / 2 );    p_box->data.p_padb->i_reserved2 =        calloc( sizeof( uint16_t ), ( p_box->data.p_padb->i_sample_count + 1 ) / 2 );    p_box->data.p_padb->i_pad1 =        calloc( sizeof( uint16_t ), ( p_box->data.p_padb->i_sample_count + 1 ) / 2 );    for( i = 0; i < i_read / 2 ; i++ )    {        p_box->data.p_padb->i_reserved1[i] = ( (*p_peek) >> 7 )&0x01;        p_box->data.p_padb->i_pad2[i] = ( (*p_peek) >> 4 )&0x07;        p_box->data.p_padb->i_reserved1[i] = ( (*p_peek) >> 3 )&0x01;        p_box->data.p_padb->i_pad1[i] = ( (*p_peek) )&0x07;        p_peek += 1; i_read -= 1;    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"stdp\" entry-count "I64Fd,                      i_read / 2 );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_padb( MP4_Box_t *p_box ){    FREE( p_box->data.p_padb->i_reserved1 );    FREE( p_box->data.p_padb->i_pad2 );    FREE( p_box->data.p_padb->i_reserved2 );    FREE( p_box->data.p_padb->i_pad1 );}static int MP4_ReadBox_elst( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_padb_t );    MP4_GETVERSIONFLAGS( p_box->data.p_elst );    MP4_GET4BYTES( p_box->data.p_elst->i_entry_count );    p_box->data.p_elst->i_segment_duration =        calloc( sizeof( uint64_t ), p_box->data.p_elst->i_entry_count );    p_box->data.p_elst->i_media_time =        calloc( sizeof( int64_t ),  p_box->data.p_elst->i_entry_count );    p_box->data.p_elst->i_media_rate_integer =        calloc( sizeof( uint16_t ), p_box->data.p_elst->i_entry_count );    p_box->data.p_elst->i_media_rate_fraction=        calloc( sizeof( uint16_t ), p_box->data.p_elst->i_entry_count );    for( i = 0; i < p_box->data.p_elst->i_entry_count; i++ )    {        if( p_box->data.p_elst->i_version == 1 )        {            MP4_GET8BYTES( p_box->data.p_elst->i_segment_duration[i] );            MP4_GET8BYTES( p_box->data.p_elst->i_media_time[i] );        }        else        {            MP4_GET4BYTES( p_box->data.p_elst->i_segment_duration[i] );            MP4_GET4BYTES( p_box->data.p_elst->i_media_time[i] );            p_box->data.p_elst->i_media_time[i] = (int32_t)p_box->data.p_elst->i_media_time[i];        }        MP4_GET2BYTES( p_box->data.p_elst->i_media_rate_integer[i] );        MP4_GET2BYTES( p_box->data.p_elst->i_media_rate_fraction[i] );    }#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"elst\" entry-count "I64Fd,                      i_read / 2 );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_elst( MP4_Box_t *p_box ){    FREE( p_box->data.p_elst->i_segment_duration );    FREE( p_box->data.p_elst->i_media_time );    FREE( p_box->data.p_elst->i_media_rate_integer );    FREE( p_box->data.p_elst->i_media_rate_fraction );}static int MP4_ReadBox_cprt( stream_t *p_stream, MP4_Box_t *p_box ){    unsigned int i_language;    unsigned int i;    MP4_READBOX_ENTER( MP4_Box_data_cprt_t );    MP4_GETVERSIONFLAGS( p_box->data.p_cprt );    i_language = GetWBE( p_peek );    for( i = 0; i < 3; i++ )    {        p_box->data.p_cprt->i_language[i] =            ( ( i_language >> ( (2-i)*5 ) )&0x1f ) + 0x60;    }    p_peek += 2; i_read -= 2;    MP4_GETSTRINGZ( p_box->data.p_cprt->psz_notice );#ifdef MP4_VERBOSE    msg_Dbg( p_stream, "read box: \"cprt\" language %c%c%c notice %s",                      p_box->data.p_cprt->i_language[0],                      p_box->data.p_cprt->i_language[1],                      p_box->data.p_cprt->i_language[2],                      p_box->data.p_cprt->psz_notice );#endif    MP4_READBOX_EXIT( 1 );}static void MP4_FreeBox_cprt( MP4_Box_t *p_box ){    FREE( p_box->data.p_cprt->psz_notice );}static int MP4_ReadBox_dcom( stream_t *p_stream, MP4_Box_t *p_box ){    MP4_READBOX_ENTER( MP4_Box_data_dcom_t );    MP4_GETFOURCC( p_box->data.p_dcom->i_algorithm );#ifdef MP4_VERBOSE    msg_Dbg( p_stream,             "read box: \"dcom\" compression algorithm : %4.4s",                      (char*)&p_box->data.p_dcom->i_algorithm );#endif    MP4_READBOX_EXIT( 1 );}static int MP4_ReadBox_cmvd( stream_t *p_stream, MP4_Box_t *p_box )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -