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

📄 libasf.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 4 页
字号:
        {            if( !ASF_HAVE(1) )                break;            p_ll->ppsz_language[i] = ASF_READS( ASF_READ1() );        }        p_ll->i_language = i;    }#ifdef ASF_DEBUG    msg_Dbg( s, "read \"language list object\" %d entries",             p_ll->i_language );    for( i = 0; i < p_ll->i_language; i++ )        msg_Dbg( s, "  - '%s'",                 p_ll->ppsz_language[i] );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_language_list( asf_object_t *p_obj){    asf_object_language_list_t *p_ll = &p_obj->language_list;    int i;    for( i = 0; i < p_ll->i_language; i++ )        FREENULL( p_ll->ppsz_language[i] );    FREENULL( p_ll->ppsz_language );}/* Stream bitrate properties */static int ASF_ReadObject_stream_bitrate_properties( stream_t *s,                                                     asf_object_t *p_obj){    asf_object_stream_bitrate_properties_t *p_sb = &p_obj->stream_bitrate;    const uint8_t *p_peek, *p_data;    int i_peek;    int i;    if( ( i_peek = stream_Peek( s, &p_peek, p_sb->i_object_size ) ) < 26 )       return VLC_EGENERIC;    p_data = &p_peek[24];    p_sb->i_bitrate = ASF_READ2();    if( p_sb->i_bitrate > 127 )        p_sb->i_bitrate = 127;  /* Buggy ? */    for( i = 0; i < p_sb->i_bitrate; i++ )    {        if( !ASF_HAVE(2 + 4) )            break;        p_sb->bitrate[i].i_stream_number = ASF_READ2()& 0x7f;        p_sb->bitrate[i].i_avg_bitrate = ASF_READ4();    }    p_sb->i_bitrate = i;#ifdef ASF_DEBUG    msg_Dbg( s,"read \"stream bitrate properties object\"" );    for( i = 0; i < p_sb->i_bitrate; i++ )    {        msg_Dbg( s,"  - stream=%d bitrate=%d",                 p_sb->bitrate[i].i_stream_number,                 p_sb->bitrate[i].i_avg_bitrate );    }#endif    return VLC_SUCCESS;}static void ASF_FreeObject_stream_bitrate_properties( asf_object_t *p_obj){    VLC_UNUSED(p_obj);}static int ASF_ReadObject_extended_stream_properties( stream_t *s,                                                      asf_object_t *p_obj){    asf_object_extended_stream_properties_t *p_esp = &p_obj->ext_stream;    const uint8_t *p_peek, *p_data;    int i_peek, i;    if( ( i_peek = stream_Peek( s, &p_peek, p_esp->i_object_size ) ) < 88 )       return VLC_EGENERIC;    p_data = &p_peek[24];    p_esp->i_start_time = GetQWLE( &p_data[0] );    p_esp->i_end_time = GetQWLE( &p_data[8] );    p_esp->i_data_bitrate = GetDWLE( &p_data[16] );    p_esp->i_buffer_size = GetDWLE( &p_data[20] );    p_esp->i_initial_buffer_fullness = GetDWLE( &p_data[24] );    p_esp->i_alternate_data_bitrate = GetDWLE( &p_data[28] );    p_esp->i_alternate_buffer_size = GetDWLE( &p_data[32] );    p_esp->i_alternate_initial_buffer_fullness = GetDWLE( &p_data[36] );    p_esp->i_maximum_object_size = GetDWLE( &p_data[40] );    p_esp->i_flags = GetDWLE( &p_data[44] );    p_esp->i_stream_number = GetWLE( &p_data[48] );    p_esp->i_language_index = GetWLE( &p_data[50] );    p_esp->i_average_time_per_frame= GetQWLE( &p_data[52] );    p_esp->i_stream_name_count = GetWLE( &p_data[60] );    p_esp->i_payload_extension_system_count = GetWLE( &p_data[62] );    p_data += 64;    p_esp->pi_stream_name_language = calloc( p_esp->i_stream_name_count,                                             sizeof(int) );    p_esp->ppsz_stream_name = calloc( p_esp->i_stream_name_count,                                      sizeof(char*) );    if( !p_esp->pi_stream_name_language ||        !p_esp->ppsz_stream_name )    {        free( p_esp->pi_stream_name_language );        free( p_esp->ppsz_stream_name );        return VLC_ENOMEM;    }    for( i = 0; i < p_esp->i_stream_name_count; i++ )    {        if( !ASF_HAVE( 2+2 ) )            break;        p_esp->pi_stream_name_language[i] = ASF_READ2();        p_esp->ppsz_stream_name[i] = ASF_READS( ASF_READ2() );    }    p_esp->i_stream_name_count = i;    for( i = 0; i < p_esp->i_payload_extension_system_count; i++ )    {        ASF_SKIP( 16 );   // GUID        ASF_SKIP( 2 );        ASF_SKIP( ASF_READ4() );    }    p_esp->p_sp = NULL;    if( p_data < &p_peek[i_peek] )    {        asf_object_t *p_sp;        /* Cannot fail as peek succeed */        stream_Read( s, NULL, p_data - p_peek );         p_sp = malloc( sizeof( asf_object_t ) );        if( !p_sp || ASF_ReadObject( s, p_sp, NULL ) )        {            free( p_sp );        }        else        {            /* This p_sp will be inserted by ReadRoot later */            p_esp->p_sp = (asf_object_stream_properties_t*)p_sp;        }    }#ifdef ASF_DEBUG    msg_Dbg( s, "read \"extended stream properties object\":" );    msg_Dbg( s, "  - start=%"PRId64" end=%"PRId64,             p_esp->i_start_time, p_esp->i_end_time );    msg_Dbg( s, "  - data bitrate=%d buffer=%d initial fullness=%d",             p_esp->i_data_bitrate,             p_esp->i_buffer_size,             p_esp->i_initial_buffer_fullness );    msg_Dbg( s, "  - alternate data bitrate=%d buffer=%d initial fullness=%d",             p_esp->i_alternate_data_bitrate,             p_esp->i_alternate_buffer_size,             p_esp->i_alternate_initial_buffer_fullness );    msg_Dbg( s, "  - maximum object size=%d", p_esp->i_maximum_object_size );    msg_Dbg( s, "  - flags=0x%x", p_esp->i_flags );    msg_Dbg( s, "  - stream number=%d language=%d",             p_esp->i_stream_number, p_esp->i_language_index );    msg_Dbg( s, "  - average time per frame=%"PRId64,             p_esp->i_average_time_per_frame );    msg_Dbg( s, "  - stream name count=%d", p_esp->i_stream_name_count );    for( i = 0; i < p_esp->i_stream_name_count; i++ )        msg_Dbg( s, "     - lang id=%d name=%s",                 p_esp->pi_stream_name_language[i],                 p_esp->ppsz_stream_name[i] );    msg_Dbg( s, "  - payload extension system count=%d",             p_esp->i_payload_extension_system_count );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_extended_stream_properties( asf_object_t *p_obj){    asf_object_extended_stream_properties_t *p_esp = &p_obj->ext_stream;    int i;    for( i = 0; i < p_esp->i_stream_name_count; i++ )        FREENULL( p_esp->ppsz_stream_name[i] );    FREENULL( p_esp->pi_stream_name_language );    FREENULL( p_esp->ppsz_stream_name );}static int ASF_ReadObject_advanced_mutual_exclusion( stream_t *s,                                                     asf_object_t *p_obj){    asf_object_advanced_mutual_exclusion_t *p_ae = &p_obj->advanced_mutual_exclusion;    const uint8_t *p_peek, *p_data;    int i_peek;    int i;    if( ( i_peek = stream_Peek( s, &p_peek, p_ae->i_object_size ) ) < 42 )       return VLC_EGENERIC;    p_data = &p_peek[24];    ASF_GetGUID( &p_ae->type, &p_data[0] );    ASF_SKIP( 16 );    p_ae->i_stream_number_count = ASF_READ2();    p_ae->pi_stream_number = calloc( p_ae->i_stream_number_count, sizeof(int) );    for( i = 0; i < p_ae->i_stream_number_count; i++ )    {        if( !ASF_HAVE(2) )            break;        p_ae->pi_stream_number[i] = ASF_READ2();    }    p_ae->i_stream_number_count = i; #ifdef ASF_DEBUG    msg_Dbg( s, "read \"advanced mutual exclusion object\"" );    for( i = 0; i < p_ae->i_stream_number_count; i++ )        msg_Dbg( s, "  - stream=%d", p_ae->pi_stream_number[i] );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_advanced_mutual_exclusion( asf_object_t *p_obj){    asf_object_advanced_mutual_exclusion_t *p_ae = &p_obj->advanced_mutual_exclusion;    FREENULL( p_ae->pi_stream_number );}static int ASF_ReadObject_stream_prioritization( stream_t *s,                                                 asf_object_t *p_obj){    asf_object_stream_prioritization_t *p_sp = &p_obj->stream_prioritization;    const uint8_t *p_peek, *p_data;    int i_peek;    int i;    if( ( i_peek = stream_Peek( s, &p_peek, p_sp->i_object_size ) ) < 26 )       return VLC_EGENERIC;    p_data = &p_peek[24];    p_sp->i_priority_count = ASF_READ2();    p_sp->pi_priority_flag = calloc( p_sp->i_priority_count, sizeof(int) );    p_sp->pi_priority_stream_number =                             calloc( p_sp->i_priority_count, sizeof(int) );    if( !p_sp->pi_priority_flag || !p_sp->pi_priority_stream_number )    {        free( p_sp->pi_priority_flag );        free( p_sp->pi_priority_stream_number );        return VLC_ENOMEM;    }    for( i = 0; i < p_sp->i_priority_count; i++ )    {        if( !ASF_HAVE(2+2) )            break;        p_sp->pi_priority_stream_number[i] = ASF_READ2();        p_sp->pi_priority_flag[i] = ASF_READ2();    }    p_sp->i_priority_count = i;#ifdef ASF_DEBUG    msg_Dbg( s, "read \"stream prioritization object\"" );    for( i = 0; i < p_sp->i_priority_count; i++ )        msg_Dbg( s, "  - Stream:%d flags=0x%x",                 p_sp->pi_priority_stream_number[i],                 p_sp->pi_priority_flag[i] );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_stream_prioritization( asf_object_t *p_obj){    asf_object_stream_prioritization_t *p_sp = &p_obj->stream_prioritization;    FREENULL( p_sp->pi_priority_stream_number );    FREENULL( p_sp->pi_priority_flag );}static int ASF_ReadObject_extended_content_description( stream_t *s,                                                        asf_object_t *p_obj){    asf_object_extended_content_description_t *p_ec =                                        &p_obj->extended_content_description;    const uint8_t *p_peek, *p_data;    int i_peek;    int i;    if( ( i_peek = stream_Peek( s, &p_peek, p_ec->i_object_size ) ) < 26 )       return VLC_EGENERIC;    p_data = &p_peek[24];    p_ec->i_count = ASF_READ2();    p_ec->ppsz_name  = calloc( p_ec->i_count, sizeof(char*) );    p_ec->ppsz_value = calloc( p_ec->i_count, sizeof(char*) );    if( !p_ec->ppsz_name || !p_ec->ppsz_value )    {        free( p_ec->ppsz_name );        free( p_ec->ppsz_value );        return VLC_ENOMEM;    }    for( i = 0; i < p_ec->i_count; i++ )    {        int i_size;        int i_type;        if( !ASF_HAVE(2 + 2+2) )            break;        p_ec->ppsz_name[i] = ASF_READS( ASF_READ2() );        /* Grrr */        i_type = ASF_READ2();        i_size = ASF_READ2();        if( i_type == 0 )        {            p_ec->ppsz_value[i] = ASF_READS( i_size );        }        else if( i_type == 1 )        {            /* Byte array */            static const char hex[16] = "0123456789ABCDEF";            int j;            p_ec->ppsz_value[i] = malloc( 2*i_size + 1 );            if( p_ec->ppsz_value[i] )            {                char *psz_value = p_ec->ppsz_value[i];                for( j = 0; j < i_size; j++ )                {                    const uint8_t v = ASF_READ1();                    psz_value[2*j+0] = hex[v>>4];                    psz_value[2*j+1] = hex[v&0xf];                }                psz_value[2*i_size] = '\0';            }        }        else if( i_type == 2 )        {            /* Bool */            p_ec->ppsz_value[i] = strdup( ASF_READ1() ? "true" : "false" );            ASF_SKIP(i_size-1);        }        else if( i_type == 3 )        {            /* DWord */            if( asprintf( &p_ec->ppsz_value[i], "%d", ASF_READ4() ) == -1 )                p_ec->ppsz_value[i] = NULL;        }        else if( i_type == 4 )        {            /* QWord */            if( asprintf( &p_ec->ppsz_value[i], "%"PRId64, ASF_READ8() ) == -1 )                p_ec->ppsz_value[i] = NULL;        }        else if( i_type == 5 )        {            /* Word */            if( asprintf( &p_ec->ppsz_value[i], "%d", ASF_READ2() ) == -1 )                p_ec->ppsz_value[i] = NULL;        }        else        {            p_ec->ppsz_value[i] = NULL;            ASF_SKIP(i_size);        }    }    p_ec->i_count = i;#ifdef ASF_DEBUG    msg_Dbg( s, "read \"extended content description object\"" );    for( i = 0; i < p_ec->i_count; i++ )        msg_Dbg( s, "  - '%s' = '%s'",                 p_ec->ppsz_name[i],                 p_ec->ppsz_value[i] );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_extended_content_description( asf_object_t *p_obj){    asf_object_extended_content_description_t *p_ec =                                        &p_obj->extended_content_description;    int i;    for( i = 0; i < p_ec->i_count; i++ )    {        FREENULL( p_ec->ppsz_name[i] );        FREENULL( p_ec->ppsz_value[i] );    }    FREENULL( p_ec->ppsz_name );    FREENULL( p_ec->ppsz_value );}#if 0static int ASF_ReadObject_XXX(stream_t *s, asf_object_t *p_obj){    asf_object_XXX_t *p_XX =        (asf_object_XXX_t *)p_obj;    const uint8_t *p_peek;    uint8_t *p_data;    int i_peek;    if( ( i_peek = stream_Peek( s, &p_peek, p_XX->i_object_size ) ) < XXX )       return VLC_EGENERIC;    p_data = &p_peek[24];#ifdef ASF_DEBUG    msg_Dbg( s,             "Read \"XXX object\"" );#endif    return VLC_SUCCESS;}static void ASF_FreeObject_XXX( asf_object_t *p_obj){    asf_object_XXX_t *p_XX =

⌨️ 快捷键说明

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