xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.


Ticket #244: xpra-fix-new-libav.patch

File xpra-fix-new-libav.patch, 2.1 KB (added by onlyjob, 8 years ago)
  • xpra/x264/

    old new  
    5555        // Decoding
    5656        AVCodec *codec;
    5757        AVCodecContext *codec_ctx;
     58        AVFrame *frame;
    5859        struct SwsContext *yuv2rgb;
    5960
    6061        // Encoding
     
    251252                fprintf(stderr, "could not open codec\n");
    252253                return 1;
    253254        }
     255        ctx->frame = avcodec_alloc_frame();
     256        if (!ctx->frame) {
     257            fprintf(stderr, "could not allocate an AVFrame for decoding\n");
     258            return 1;
     259        }
    254260        return 0;
    255261}
    256262struct x264lib_ctx *init_decoder(int width, int height, int csc_fmt)
     
    275281                sws_freeContext(ctx->yuv2rgb);
    276282                ctx->yuv2rgb = NULL;
    277283        }
     284        avcodec_free_frame(&ctx->frame);
    278285}
    279286void clean_decoder(struct x264lib_ctx *ctx)
    280287{
     
    390397        int got_picture;
    391398        int len;
    392399        int i;
    393         AVFrame picture;
     400        AVFrame *picture = ctx->frame;
    394401        AVPacket avpkt;
    395402
    396403        av_init_packet(&avpkt);
     
    398405        if (!ctx->codec_ctx || !ctx->codec)
    399406                return 1;
    400407
    401         avcodec_get_frame_defaults(&picture);
     408        avcodec_get_frame_defaults(picture);
    402409
    403410        avpkt.data = in;
    404411        avpkt.size = size;
    405412
    406         len = avcodec_decode_video2(ctx->codec_ctx, &picture, &got_picture, &avpkt);
     413        len = avcodec_decode_video2(ctx->codec_ctx, picture, &got_picture, &avpkt);
    407414        if (len < 0) {
    408415                fprintf(stderr, "Error while decoding frame\n");
    409416                memset(out, 0, sizeof(*out));
     
    411418        }
    412419
    413420        for (i = 0; i < 3; i++) {
    414                 (*out)[i] = picture.data[i];
    415                 *outsize += ctx->height * picture.linesize[i];
    416                 (*outstride)[i] = picture.linesize[i];
     421                (*out)[i] = picture->data[i];
     422                *outsize += ctx->height * picture->linesize[i];
     423                (*outstride)[i] = picture->linesize[i];
    417424        }
    418425
    419426    if (*outsize == 0) {
    420         fprintf(stderr, "Decoded image, size %d %d %d, ptr %p %p %p\n", (*outstride)[0] * ctx->height, (*outstride)[1]*ctx->height, (*outstride)[2]*ctx->height, picture.data[0], picture.data[1], picture.data[2]);
     427        fprintf(stderr, "Decoded image, size %d %d %d, ptr %p %p %p\n", (*outstride)[0] * ctx->height, (*outstride)[1]*ctx->height, (*outstride)[2]*ctx->height, picture->data[0], picture->data[1], picture->data[2]);
    421428        return 3;
    422429    }
    423430