Пример #1
0
extern DllExport dirac_decoder_state_t dirac_parse (dirac_decoder_t *decoder)
{
    TEST (decoder != NULL);
    TEST (decoder->parser != NULL);
    DiracParser *parser = static_cast<DiracParser *>(decoder->parser);

    while(true)
    {
        try
        {
            decoder->state = parser->Parse();

            switch (decoder->state)
            {
            case STATE_BUFFER:
                return decoder->state;
                break;

            case STATE_SEQUENCE:
                set_sequence_params(parser, decoder);
                decoder->frame_avail = 0;
                return decoder->state;
                break;

            case STATE_PICTURE_START:
                /* frame params of the frame being decoded in coding order */
                set_frame_params (parser->GetNextFrameParams(), decoder);
                decoder->frame_avail = 0;
                return decoder->state;
                break;

            case STATE_PICTURE_AVAIL:
                /* frame params of the frame available for display */
                set_frame_params (parser->GetNextFrame().GetFparams(), decoder);
                set_frame_data (parser, decoder);
                if (!parser->GetDecoderParams().FieldCoding() ||
                    decoder->frame_params.fnum%2)
                {
                    decoder->frame_avail = 1;
                    return decoder->state;
                }
                break;

            case STATE_INVALID:
                return decoder->state;
                break;

            default:
                break;
            }
        }//try
        catch (const DiracException& e)
        {
             return STATE_INVALID;
        }
    }

    return decoder->state;
}
Пример #2
0
extern DllExport dirac_decoder_state_t dirac_parse (dirac_decoder_t *decoder)
{
    TEST (decoder != NULL);
    TEST (decoder->parser != NULL);
    DiracParser *parser = static_cast<DiracParser *>(decoder->parser);

    decoder->state = parser->Parse();

    switch (decoder->state)
    {
    case STATE_BUFFER:
        break;

    case STATE_SEQUENCE:
        set_sequence_params(parser, decoder);
        decoder->frame_avail = 0;
        break;

    case STATE_PICTURE_START:
        /* frame params of the frame being decoded in coding order */
        set_frame_params (parser->GetNextFrameParams(), decoder);
        decoder->frame_avail = 0;
        break;

    case STATE_PICTURE_AVAIL:
        decoder->frame_avail = 1;
        /* frame params of the frame available for display */
        set_frame_params (parser->GetNextFrame().GetFparams(), decoder);
        set_frame_data (parser, decoder);
        break;

    case STATE_INVALID:
        break;

    default:
        break;
    }
    return decoder->state;
}