static int theora_packet(AVFormatContext *s, int idx)

{

    struct ogg *ogg = s->priv_data;

    struct ogg_stream *os = ogg->streams + idx;

    int duration;



    /* first packet handling

       here we parse the duration of each packet in the first page and compare

       the total duration to the page granule to find the encoder delay and

       set the first timestamp */



    if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {

        int seg;



        duration = 1;

        for (seg = os->segp; seg < os->nsegs; seg++) {

            if (os->segments[seg] < 255)

                duration ++;

        }



        os->lastpts = os->lastdts   = theora_gptopts(s, idx, os->granule, NULL) - duration;

        if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {

            s->streams[idx]->start_time = os->lastpts;

            if (s->streams[idx]->duration)

                s->streams[idx]->duration -= s->streams[idx]->start_time;

        }

    }



    /* parse packet duration */

    if (os->psize > 0) {

        os->pduration = 1;

    }



    return 0;

}

static int theora_packet(AVFormatContext *s, int idx)

{

    struct ogg *ogg = s->priv_data;

    struct ogg_stream *os = ogg->streams + idx;

    int duration;



    









    if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {

        int seg;



        duration = 1;

        for (seg = os->segp; seg < os->nsegs; seg++) {

            if (os->segments[seg] < 255)

                duration ++;

        }



        os->lastpts = os->lastdts   = theora_gptopts(s, idx, os->granule, NULL) - duration;

        if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {

            s->streams[idx]->start_time = os->lastpts;

            if (s->streams[idx]->duration)

                s->streams[idx]->duration -= s->streams[idx]->start_time;

        }

    }



    

    if (os->psize > 0) {

        os->pduration = 1;

    }



    return 0;

}

static int FUNC_0(AVFormatContext *VAR_0, int VAR_1)

{

    struct VAR_2 *VAR_2 = VAR_0->priv_data;

    struct ogg_stream *VAR_3 = VAR_2->streams + VAR_1;

    int VAR_4;



    









    if ((!VAR_3->lastpts || VAR_3->lastpts == AV_NOPTS_VALUE) && !(VAR_3->flags & OGG_FLAG_EOS)) {

        int VAR_5;



        VAR_4 = 1;

        for (VAR_5 = VAR_3->segp; VAR_5 < VAR_3->nsegs; VAR_5++) {

            if (VAR_3->segments[VAR_5] < 255)

                VAR_4 ++;

        }



        VAR_3->lastpts = VAR_3->lastdts   = theora_gptopts(VAR_0, VAR_1, VAR_3->granule, NULL) - VAR_4;

        if(VAR_0->streams[VAR_1]->start_time == AV_NOPTS_VALUE) {

            VAR_0->streams[VAR_1]->start_time = VAR_3->lastpts;

            if (VAR_0->streams[VAR_1]->VAR_4)

                VAR_0->streams[VAR_1]->VAR_4 -= VAR_0->streams[VAR_1]->start_time;

        }

    }



    

    if (VAR_3->psize > 0) {

        VAR_3->pduration = 1;

    }



    return 0;

}

static int FUNC_0(AVFormatContext *VAR_0, int VAR_1)
{ struct VAR_2 *VAR_2 = VAR_0->priv_data; struct ogg_stream *VAR_3 = VAR_2->streams + VAR_1; int VAR_4; if ((!VAR_3->lastpts || VAR_3->lastpts == AV_NOPTS_VALUE) && !(VAR_3->flags & OGG_FLAG_EOS)) { int VAR_5; VAR_4 = 1; for (VAR_5 = VAR_3->segp; VAR_5 < VAR_3->nsegs; VAR_5++) { if (VAR_3->segments[VAR_5] < 255)
VAR_4 ++; } VAR_3->lastpts = VAR_3->lastdts   = theora_gptopts(VAR_0, VAR_1, VAR_3->granule, NULL) - VAR_4; if(VAR_0->streams[VAR_1]->start_time == AV_NOPTS_VALUE) { VAR_0->streams[VAR_1]->start_time = VAR_3->lastpts; if (VAR_0->streams[VAR_1]->VAR_4)
VAR_0->streams[VAR_1]->VAR_4 -= VAR_0->streams[VAR_1]->start_time; } } if (VAR_3->psize > 0) { VAR_3->pduration = 1; } return 0; }