Esempio n. 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;
}
Esempio n. 2
0
extern DllExport void dirac_buffer (dirac_decoder_t *decoder, unsigned char *start, unsigned char *end)
{
    TEST (decoder != NULL);
    TEST (decoder->parser != NULL);
    DiracParser *parser = static_cast<DiracParser *>(decoder->parser);

    parser->SetBuffer((char *)start, (char *)end);
}
Esempio n. 3
0
extern DllExport void dirac_skip (dirac_decoder_t *decoder, int skip)
{
    TEST (decoder != NULL);
    TEST (decoder->parser != NULL);
    DiracParser *parser = static_cast<DiracParser *>(decoder->parser);

    parser->SetSkip(skip > 0 ? true : false);
}
Esempio n. 4
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;
}
Esempio n. 5
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);

    unsigned int pic_num;

    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_AVAIL:
            {
                const Picture *my_picture = parser->GetNextPicture();
                if (my_picture)
                {
                    pic_num = parser->GetNextPicture()->GetPparams().PictureNum();
                    decoder->frame_num = pic_num;
                    set_frame_data (parser, decoder);

                    /* A full frame is only available if we're doing
                    * progressive coding or have decoded the second field.
                    * Will only return when a full frame is available
                    */
                    if (!parser->GetDecoderParams().FieldCoding() ||
                        pic_num%2)
                    {
                        /* Frame number currently available for display */
                        decoder->frame_num = pic_num;
                        if (parser->GetDecoderParams().FieldCoding())
                            decoder->frame_num = pic_num>>1;
                        decoder->frame_avail = 1;
                        return decoder->state;
                    }
                }
                break;
            }

            case STATE_INVALID:
                return decoder->state;
                break;

            case STATE_SEQUENCE_END:
                return decoder->state;
                break;

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

    return decoder->state;
}