theora_header (AVFormatContext * s, int idx)

{

    struct ogg *ogg = s->priv_data;

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

    AVStream *st = s->streams[idx];

    struct theora_params *thp = os->private;

    int cds = st->codec->extradata_size + os->psize + 2;

    uint8_t *cdp;



    if(!(os->buf[os->pstart] & 0x80))

        return 0;



    if(!thp){

        thp = av_mallocz(sizeof(*thp));

        os->private = thp;




    if (os->buf[os->pstart] == 0x80) {

        GetBitContext gb;

        int width, height;



        init_get_bits(&gb, os->buf + os->pstart, os->psize*8);



        skip_bits_long(&gb, 7*8); /* 0x80"theora" */



        thp->version = get_bits_long(&gb, 24);

        if (thp->version < 0x030100)

        {

            av_log(s, AV_LOG_ERROR,

                "Too old or unsupported Theora (%x)\n", thp->version);

            return -1;




        width  = get_bits(&gb, 16) << 4;

        height = get_bits(&gb, 16) << 4;

        avcodec_set_dimensions(st->codec, width, height);



        if (thp->version >= 0x030400)

            skip_bits(&gb, 100);



        if (thp->version >= 0x030200) {

            width  = get_bits_long(&gb, 24);

            height = get_bits_long(&gb, 24);

            if (   width  <= st->codec->width  && width  > st->codec->width-16

                && height <= st->codec->height && height > st->codec->height-16)

                avcodec_set_dimensions(st->codec, width, height);



            skip_bits(&gb, 16);


        st->codec->time_base.den = get_bits_long(&gb, 32);

        st->codec->time_base.num = get_bits_long(&gb, 32);






        st->time_base = st->codec->time_base;



        st->sample_aspect_ratio.num = get_bits_long(&gb, 24);

        st->sample_aspect_ratio.den = get_bits_long(&gb, 24);



        if (thp->version >= 0x030200)

            skip_bits_long(&gb, 38);

        if (thp->version >= 0x304000)

            skip_bits(&gb, 2);



        thp->gpshift = get_bits(&gb, 5);

        thp->gpmask = (1 << thp->gpshift) - 1;



        st->codec->codec_type = CODEC_TYPE_VIDEO;

        st->codec->codec_id = CODEC_ID_THEORA;



    } else if (os->buf[os->pstart] == 0x83) {

        vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);




    st->codec->extradata = av_realloc (st->codec->extradata,

                                       cds + FF_INPUT_BUFFER_PADDING_SIZE);

    cdp = st->codec->extradata + st->codec->extradata_size;

    *cdp++ = os->psize >> 8;

    *cdp++ = os->psize & 0xff;

    memcpy (cdp, os->buf + os->pstart, os->psize);

    st->codec->extradata_size = cds;



    return 1;

theora_header (AVFormatContext * s, int idx)

{

    struct ogg *ogg = s->priv_data;

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

    AVStream *st = s->streams[idx];

    struct theora_params *thp = os->private;

    int cds = st->codec->extradata_size + os->psize + 2;

    uint8_t *cdp;



    if(!(os->buf[os->pstart] & 0x80))

        return 0;



    if(!thp){

        thp = av_mallocz(sizeof(*thp));

        os->private = thp;




    if (os->buf[os->pstart] == 0x80) {

        GetBitContext gb;

        int width, height;



        init_get_bits(&gb, os->buf + os->pstart, os->psize*8);



        skip_bits_long(&gb, 7*8); 



        thp->version = get_bits_long(&gb, 24);

        if (thp->version < 0x030100)

        {

            av_log(s, AV_LOG_ERROR,

                "Too old or unsupported Theora (%x)\n", thp->version);

            return -1;




        width  = get_bits(&gb, 16) << 4;

        height = get_bits(&gb, 16) << 4;

        avcodec_set_dimensions(st->codec, width, height);



        if (thp->version >= 0x030400)

            skip_bits(&gb, 100);



        if (thp->version >= 0x030200) {

            width  = get_bits_long(&gb, 24);

            height = get_bits_long(&gb, 24);

            if (   width  <= st->codec->width  && width  > st->codec->width-16

                && height <= st->codec->height && height > st->codec->height-16)

                avcodec_set_dimensions(st->codec, width, height);



            skip_bits(&gb, 16);


        st->codec->time_base.den = get_bits_long(&gb, 32);

        st->codec->time_base.num = get_bits_long(&gb, 32);






        st->time_base = st->codec->time_base;



        st->sample_aspect_ratio.num = get_bits_long(&gb, 24);

        st->sample_aspect_ratio.den = get_bits_long(&gb, 24);



        if (thp->version >= 0x030200)

            skip_bits_long(&gb, 38);

        if (thp->version >= 0x304000)

            skip_bits(&gb, 2);



        thp->gpshift = get_bits(&gb, 5);

        thp->gpmask = (1 << thp->gpshift) - 1;



        st->codec->codec_type = CODEC_TYPE_VIDEO;

        st->codec->codec_id = CODEC_ID_THEORA;



    } else if (os->buf[os->pstart] == 0x83) {

        vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);




    st->codec->extradata = av_realloc (st->codec->extradata,

                                       cds + FF_INPUT_BUFFER_PADDING_SIZE);

    cdp = st->codec->extradata + st->codec->extradata_size;

    *cdp++ = os->psize >> 8;

    *cdp++ = os->psize & 0xff;

    memcpy (cdp, os->buf + os->pstart, os->psize);

    st->codec->extradata_size = cds;



    return 1;

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;

    AVStream *st = VAR_0->streams[VAR_1];

    struct theora_params *VAR_4 = VAR_3->private;

    int VAR_5 = st->codec->extradata_size + VAR_3->psize + 2;

    uint8_t *cdp;



    if(!(VAR_3->buf[VAR_3->pstart] & 0x80))

        return 0;



    if(!VAR_4){

        VAR_4 = av_mallocz(sizeof(*VAR_4));

        VAR_3->private = VAR_4;




    if (VAR_3->buf[VAR_3->pstart] == 0x80) {

        GetBitContext gb;

        int VAR_6, VAR_7;



        init_get_bits(&gb, VAR_3->buf + VAR_3->pstart, VAR_3->psize*8);



        skip_bits_long(&gb, 7*8); 



        VAR_4->version = get_bits_long(&gb, 24);

        if (VAR_4->version < 0x030100)

        {

            av_log(VAR_0, AV_LOG_ERROR,

                "Too old or unsupported Theora (%x)\n", VAR_4->version);

            return -1;




        VAR_6  = get_bits(&gb, 16) << 4;

        VAR_7 = get_bits(&gb, 16) << 4;

        avcodec_set_dimensions(st->codec, VAR_6, VAR_7);



        if (VAR_4->version >= 0x030400)

            skip_bits(&gb, 100);



        if (VAR_4->version >= 0x030200) {

            VAR_6  = get_bits_long(&gb, 24);

            VAR_7 = get_bits_long(&gb, 24);

            if (   VAR_6  <= st->codec->VAR_6  && VAR_6  > st->codec->VAR_6-16

                && VAR_7 <= st->codec->VAR_7 && VAR_7 > st->codec->VAR_7-16)

                avcodec_set_dimensions(st->codec, VAR_6, VAR_7);



            skip_bits(&gb, 16);


        st->codec->time_base.den = get_bits_long(&gb, 32);

        st->codec->time_base.num = get_bits_long(&gb, 32);






        st->time_base = st->codec->time_base;



        st->sample_aspect_ratio.num = get_bits_long(&gb, 24);

        st->sample_aspect_ratio.den = get_bits_long(&gb, 24);



        if (VAR_4->version >= 0x030200)

            skip_bits_long(&gb, 38);

        if (VAR_4->version >= 0x304000)

            skip_bits(&gb, 2);



        VAR_4->gpshift = get_bits(&gb, 5);

        VAR_4->gpmask = (1 << VAR_4->gpshift) - 1;



        st->codec->codec_type = CODEC_TYPE_VIDEO;

        st->codec->codec_id = CODEC_ID_THEORA;



    } else if (VAR_3->buf[VAR_3->pstart] == 0x83) {

        vorbis_comment (VAR_0, VAR_3->buf + VAR_3->pstart + 7, VAR_3->psize - 8);




    st->codec->extradata = av_realloc (st->codec->extradata,

                                       VAR_5 + FF_INPUT_BUFFER_PADDING_SIZE);

    cdp = st->codec->extradata + st->codec->extradata_size;

    *cdp++ = VAR_3->psize >> 8;

    *cdp++ = VAR_3->psize & 0xff;

    memcpy (cdp, VAR_3->buf + VAR_3->pstart, VAR_3->psize);

    st->codec->extradata_size = VAR_5;



    return 1;

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; AVStream *st = VAR_0->streams[VAR_1]; struct theora_params *VAR_4 = VAR_3->private; int VAR_5 = st->codec->extradata_size + VAR_3->psize + 2; uint8_t *cdp; if(!(VAR_3->buf[VAR_3->pstart] & 0x80))
return 0; if(!VAR_4){ VAR_4 = av_mallocz(sizeof(*VAR_4)); VAR_3->private = VAR_4; if (VAR_3->buf[VAR_3->pstart] == 0x80) { GetBitContext gb; int VAR_6, VAR_7; init_get_bits(&gb, VAR_3->buf + VAR_3->pstart, VAR_3->psize*8); skip_bits_long(&gb, 7*8); VAR_4->version = get_bits_long(&gb, 24); if (VAR_4->version < 0x030100)
{ av_log(VAR_0, AV_LOG_ERROR,
"Too old or unsupported Theora (%x)\n", VAR_4->version); return -1; VAR_6  = get_bits(&gb, 16) << 4; VAR_7 = get_bits(&gb, 16) << 4; avcodec_set_dimensions(st->codec, VAR_6, VAR_7); if (VAR_4->version >= 0x030400)
skip_bits(&gb, 100); if (VAR_4->version >= 0x030200) { VAR_6  = get_bits_long(&gb, 24); VAR_7 = get_bits_long(&gb, 24); if (   VAR_6  <= st->codec->VAR_6  && VAR_6  > st->codec->VAR_6-16
&& VAR_7 <= st->codec->VAR_7 && VAR_7 > st->codec->VAR_7-16)
avcodec_set_dimensions(st->codec, VAR_6, VAR_7); skip_bits(&gb, 16); st->codec->time_base.den = get_bits_long(&gb, 32); st->codec->time_base.num = get_bits_long(&gb, 32); st->time_base = st->codec->time_base; st->sample_aspect_ratio.num = get_bits_long(&gb, 24); st->sample_aspect_ratio.den = get_bits_long(&gb, 24); if (VAR_4->version >= 0x030200)
skip_bits_long(&gb, 38); if (VAR_4->version >= 0x304000)
skip_bits(&gb, 2); VAR_4->gpshift = get_bits(&gb, 5); VAR_4->gpmask = (1 << VAR_4->gpshift) - 1; st->codec->codec_type = CODEC_TYPE_VIDEO; st->codec->codec_id = CODEC_ID_THEORA; } else if (VAR_3->buf[VAR_3->pstart] == 0x83) { vorbis_comment (VAR_0, VAR_3->buf + VAR_3->pstart + 7, VAR_3->psize - 8); st->codec->extradata = av_realloc (st->codec->extradata,
VAR_5 + FF_INPUT_BUFFER_PADDING_SIZE); cdp = st->codec->extradata + st->codec->extradata_size; *cdp++ = VAR_3->psize >> 8; *cdp++ = VAR_3->psize & 0xff; memcpy (cdp, VAR_3->buf + VAR_3->pstart, VAR_3->psize); st->codec->extradata_size = VAR_5; return 1;