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

📄 vpar_headers.c

📁 vlc stand 0.1.99 ist sehr einfach
💻 C
📖 第 1 页 / 共 3 页
字号:
    {        0.0,        ((23.0*1000.0)/1001.0),        24.0,        25.0,        ((30.0*1000.0)/1001.0),        30.0,        50.0,        ((60.0*1000.0)/1001.0),        60.0,        RESERVED, RESERVED, RESERVED, RESERVED, RESERVED, RESERVED, RESERVED    };#undef RESERVED    int i_height_save, i_width_save;    i_height_save = p_vpar->sequence.i_height;    i_width_save = p_vpar->sequence.i_width;    p_vpar->sequence.i_width = GetBits( &p_vpar->bit_stream, 12 );    p_vpar->sequence.i_height = GetBits( &p_vpar->bit_stream, 12 );    p_vpar->sequence.i_aspect_ratio = GetBits( &p_vpar->bit_stream, 4 );    p_vpar->sequence.r_frame_rate =            r_frame_rate_table[ GetBits( &p_vpar->bit_stream, 4 ) ];    /* We don't need bit_rate_value, marker_bit, vbv_buffer_size,     * constrained_parameters_flag */    RemoveBits( &p_vpar->bit_stream, 30 );    /*     * Quantization matrices     */    if( GetBits( &p_vpar->bit_stream, 1 ) ) /* load_intra_quantizer_matrix */    {        LoadMatrix( p_vpar, &p_vpar->sequence.intra_quant );    }    else    {        /* Use default matrix. */        LinkMatrix( &p_vpar->sequence.intra_quant, pi_default_intra_quant );    }    if( GetBits( &p_vpar->bit_stream, 1 ) ) /* load_non_intra_quantizer_matrix */    {        LoadMatrix( p_vpar, &p_vpar->sequence.nonintra_quant );    }    else    {        /* Use default matrix. */        LinkMatrix( &p_vpar->sequence.nonintra_quant, pi_default_nonintra_quant );    }    /* Unless later overwritten by a matrix extension, we have the same     * matrices for luminance and chrominance. */    LinkMatrix( &p_vpar->sequence.chroma_intra_quant,                p_vpar->sequence.intra_quant.pi_matrix );    LinkMatrix( &p_vpar->sequence.chroma_nonintra_quant,                p_vpar->sequence.nonintra_quant.pi_matrix );    /*     * Sequence Extension     */    NextStartCode( p_vpar );    if( ShowBits( &p_vpar->bit_stream, 32 ) == EXTENSION_START_CODE )    {        int                         i_dummy;        /* Turn the MPEG2 flag on */        p_vpar->sequence.b_mpeg2 = 1;        /* Parse sequence_extension */        RemoveBits32( &p_vpar->bit_stream );        /* extension_start_code_identifier, profile_and_level_indication */        RemoveBits( &p_vpar->bit_stream, 12 );        p_vpar->sequence.b_progressive = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->sequence.i_chroma_format = GetBits( &p_vpar->bit_stream, 2 );        p_vpar->sequence.i_width |= GetBits( &p_vpar->bit_stream, 2 ) << 12;        p_vpar->sequence.i_height |= GetBits( &p_vpar->bit_stream, 2 ) << 12;        /* bit_rate_extension, marker_bit, vbv_buffer_size_extension, low_delay */        RemoveBits( &p_vpar->bit_stream, 22 );        /* frame_rate_extension_n */        i_dummy = GetBits( &p_vpar->bit_stream, 2 );        /* frame_rate_extension_d */        p_vpar->sequence.r_frame_rate *= (i_dummy + 1)                                  / (GetBits( &p_vpar->bit_stream, 5 ) + 1);    }    else    {        /* It's an MPEG-1 stream. Put adequate parameters. */        p_vpar->sequence.b_mpeg2 = 0;        p_vpar->sequence.b_progressive = 1;        p_vpar->sequence.i_chroma_format = CHROMA_420;    }    /* Update sizes */    p_vpar->sequence.i_mb_width = (p_vpar->sequence.i_width + 15) / 16;    p_vpar->sequence.i_mb_height = (p_vpar->sequence.b_progressive) ?                                   (p_vpar->sequence.i_height + 15) / 16 :                                   2 * ((p_vpar->sequence.i_height + 31) / 32);    p_vpar->sequence.i_mb_size = p_vpar->sequence.i_mb_width                                        * p_vpar->sequence.i_mb_height;    p_vpar->sequence.i_width = (p_vpar->sequence.i_mb_width * 16);    p_vpar->sequence.i_height = (p_vpar->sequence.i_mb_height * 16);    p_vpar->sequence.i_size = p_vpar->sequence.i_width                                        * p_vpar->sequence.i_height;    /* Update chromatic information. */    switch( p_vpar->sequence.i_chroma_format )    {    case CHROMA_420:        p_vpar->sequence.i_chroma_nb_blocks = 2;        p_vpar->sequence.i_chroma_width = p_vpar->sequence.i_width >> 1;        p_vpar->sequence.i_chroma_mb_width = 8;        p_vpar->sequence.i_chroma_mb_height = 8;        break;    case CHROMA_422:        p_vpar->sequence.i_chroma_nb_blocks = 4;        p_vpar->sequence.i_chroma_width = p_vpar->sequence.i_width >> 1;        p_vpar->sequence.i_chroma_mb_width = 8;        p_vpar->sequence.i_chroma_mb_height = 16;        break;    case CHROMA_444:        p_vpar->sequence.i_chroma_nb_blocks = 8;        p_vpar->sequence.i_chroma_width = p_vpar->sequence.i_width;        p_vpar->sequence.i_chroma_mb_width = 16;        p_vpar->sequence.i_chroma_mb_height = 16;    }    /* Reset scalable_mode. */    p_vpar->sequence.i_scalable_mode = SC_NONE;#if 0    if(    p_vpar->sequence.i_width != i_width_save        || p_vpar->sequence.i_height != i_height_save )    {         /* FIXME: What do we do in case of a size change ?? */    }#endif    /* Extension and User data */    ExtensionAndUserData( p_vpar );}/***************************************************************************** * GroupHeader : Parse the next group of pictures header *****************************************************************************/static void GroupHeader( vpar_thread_t * p_vpar ){    /* Nothing to do, we don't care. */    RemoveBits( &p_vpar->bit_stream, 27 );    ExtensionAndUserData( p_vpar );}/***************************************************************************** * PictureHeader : Parse the next picture header *****************************************************************************/static void PictureHeader( vpar_thread_t * p_vpar ){    /* Table of optimized PictureData functions. */    static f_picture_data_t ppf_picture_data[4][4] =    {        {            NULL, NULL, NULL, NULL        },        {            /* TOP_FIELD */#if (VPAR_OPTIM_LEVEL > 1)            NULL, vpar_PictureData2I420TZ, vpar_PictureData2P420TZ,            vpar_PictureData2B420TZ#else            NULL, vpar_PictureDataGENERIC, vpar_PictureDataGENERIC,            vpar_PictureDataGENERIC#endif        },        {            /* BOTTOM_FIELD */#if (VPAR_OPTIM_LEVEL > 1)            NULL, vpar_PictureData2I420BZ, vpar_PictureData2P420BZ,            vpar_PictureData2B420BZ#else            NULL, vpar_PictureDataGENERIC, vpar_PictureDataGENERIC,            vpar_PictureDataGENERIC#endif        },        {            /* FRAME_PICTURE */#if (VPAR_OPTIM_LEVEL > 0)            NULL, vpar_PictureData2I420F0, vpar_PictureData2P420F0,            vpar_PictureData2B420F0#else            NULL, vpar_PictureDataGENERIC, vpar_PictureDataGENERIC,            vpar_PictureDataGENERIC#endif        }    };    int                 i_structure;    int                 i_mb_base;    boolean_t           b_parsable;#ifdef VDEC_SMP    int                 i_mb;#endif    RemoveBits( &p_vpar->bit_stream, 10 ); /* temporal_reference */    p_vpar->picture.i_coding_type = GetBits( &p_vpar->bit_stream, 3 );    RemoveBits( &p_vpar->bit_stream, 16 ); /* vbv_delay */    if( p_vpar->picture.i_coding_type == P_CODING_TYPE        || p_vpar->picture.i_coding_type == B_CODING_TYPE )    {        p_vpar->picture.pb_full_pel_vector[0] = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.i_forward_f_code = GetBits( &p_vpar->bit_stream, 3 );    }    if( p_vpar->picture.i_coding_type == B_CODING_TYPE )    {        p_vpar->picture.pb_full_pel_vector[1] = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.i_backward_f_code = GetBits( &p_vpar->bit_stream, 3 );    }    /* extra_information_picture */    while( GetBits( &p_vpar->bit_stream, 1 ) )    {        RemoveBits( &p_vpar->bit_stream, 8 );    }    /*     * Picture Coding Extension     */    NextStartCode( p_vpar );    if( ShowBits( &p_vpar->bit_stream, 32 ) == EXTENSION_START_CODE )    {        /* Parse picture_coding_extension */        RemoveBits32( &p_vpar->bit_stream );        /* extension_start_code_identifier */        RemoveBits( &p_vpar->bit_stream, 4 );        p_vpar->picture.ppi_f_code[0][0] = GetBits( &p_vpar->bit_stream, 4 );        p_vpar->picture.ppi_f_code[0][1] = GetBits( &p_vpar->bit_stream, 4 );        p_vpar->picture.ppi_f_code[1][0] = GetBits( &p_vpar->bit_stream, 4 );        p_vpar->picture.ppi_f_code[1][1] = GetBits( &p_vpar->bit_stream, 4 );        p_vpar->picture.i_intra_dc_precision = GetBits( &p_vpar->bit_stream, 2 );        i_structure = GetBits( &p_vpar->bit_stream, 2 );        p_vpar->picture.b_top_field_first = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_frame_pred_frame_dct             = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_concealment_mv = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_q_scale_type = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_intra_vlc_format = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_alternate_scan = GetBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_repeat_first_field = GetBits( &p_vpar->bit_stream, 1 );        /* repeat_first_field (ISO/IEC 13818-2 6.3.10 is necessary to know         * the length of the picture_display_extension structure.         * chroma_420_type (obsolete) */        RemoveBits( &p_vpar->bit_stream, 1 );        p_vpar->picture.b_progressive_frame = GetBits( &p_vpar->bit_stream, 1 );        /* composite_display_flag */        if( GetBits( &p_vpar->bit_stream, 1 ) )        {            /* v_axis, field_sequence, sub_carrier, burst_amplitude,             * sub_carrier_phase */            RemoveBits( &p_vpar->bit_stream, 20 );        }    }    else    {        /* MPEG-1 compatibility flags */        p_vpar->picture.i_intra_dc_precision = 0; /* 8 bits */        i_structure = FRAME_STRUCTURE;        p_vpar->picture.b_frame_pred_frame_dct = 1;        p_vpar->picture.b_concealment_mv = 0;        p_vpar->picture.b_q_scale_type = 0;        p_vpar->picture.b_intra_vlc_format = 0;        p_vpar->picture.b_alternate_scan = 0; /* zigzag */        p_vpar->picture.b_repeat_first_field = 0;        p_vpar->picture.b_progressive_frame = 1;    }    if( p_vpar->picture.i_current_structure &&        (i_structure == FRAME_STRUCTURE ||         i_structure == p_vpar->picture.i_current_structure) )    {        /* We don't have the second field of the buffered frame. */        if( p_vpar->picture.p_picture != NULL )        {            ReferenceReplace( p_vpar,                      p_vpar->picture.i_coding_type,                      NULL );#ifdef VDEC_SMP            for( i_mb = 0; p_vpar->picture.pp_mb[i_mb] != NULL; i_mb++ )            {                vpar_DestroyMacroblock( &p_vpar->vfifo,                                        p_vpar->picture.pp_mb[i_mb] );            }#endif            vout_DestroyPicture( p_vpar->p_vout, p_vpar->picture.p_picture );        }        p_vpar->picture.i_current_structure = 0;        intf_DbgMsg("vpar debug: odd number of field picture.\n");    }    /* Do we have the reference pictures ? */    b_parsable = !(((p_vpar->picture.i_coding_type == P_CODING_TYPE) &&                    (p_vpar->sequence.p_backward == NULL)) ||                     /* p_backward will become p_forward later */                   ((p_vpar->picture.i_coding_type == B_CODING_TYPE) &&                    (p_vpar->sequence.p_forward == NULL ||                     p_vpar->sequence.p_backward == NULL)));    if( b_parsable )    {        if( p_vpar->picture.i_current_structure )        {            /* Second field of a frame. We will decode it if, and only if we            * have decoded the first field. */            b_parsable = (p_vpar->picture.p_picture != NULL);        }        else        {            /* Does synchro say we have enough time to decode it ? */            b_parsable = vpar_SynchroChoose( p_vpar,                               p_vpar->picture.i_coding_type, i_structure );        }    }#ifdef POLUX_SYNCHRO    else if( !p_vpar->picture.i_current_structure )    {        vpar_SynchroTrash( p_vpar, p_vpar->picture.i_coding_type, i_structure );    }#endif

⌨️ 快捷键说明

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