Ticket #1911: 040-fix-theora-framesize-not-x16.2.patch

File 040-fix-theora-framesize-not-x16.2.patch, 1.6 KB (added by dvdkhlng@…, 15 years ago)

updated patch (need to honour theora_info::offset_{x,y} as well)

  • libmpcodecs/vd_theora.c

    old new  
    133133    mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: Theora video init ok!\n");
    134134    mp_msg(MSGT_DECVIDEO,MSGL_INFO,"Frame: %dx%d, Picture %dx%d, Offset [%d,%d]\n", context->inf.width, context->inf.height, context->inf.frame_width, context->inf.frame_height, context->inf.offset_x, context->inf.offset_y);
    135135
    136     return mpcodecs_config_vo (sh,context->inf.width,context->inf.height,theora_pixelformat2imgfmt(context->inf.pixelformat));
     136    return mpcodecs_config_vo (sh,context->inf.frame_width,context->inf.frame_height,theora_pixelformat2imgfmt(context->inf.pixelformat));
    137137
    138138err_out:
    139139    free(context);
     
    196196    mpi = mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0, yuv.y_width, yuv.y_height);
    197197    if(!mpi) return NULL;
    198198
    199     mpi->planes[0]=yuv.y;
     199    int y_offs = context->inf.offset_x + context->inf.offset_y*yuv.y_stride;
     200    int uv_h_sampling = mpi->width / mpi->chroma_width;
     201    int uv_v_sampling = mpi->height / mpi->chroma_height;
     202    int uv_offs = context->inf.offset_x/uv_h_sampling
     203       + context->inf.offset_y/uv_v_sampling * yuv.uv_stride;
     204
     205    mpi->planes[0]=yuv.y + y_offs;
    200206    mpi->stride[0]=yuv.y_stride;
    201     mpi->planes[1]=yuv.u;
     207    mpi->planes[1]=yuv.u + uv_offs;
    202208    mpi->stride[1]=yuv.uv_stride;
    203     mpi->planes[2]=yuv.v;
     209    mpi->planes[2]=yuv.v + uv_offs;
    204210    mpi->stride[2]=yuv.uv_stride;
    205211
    206212    return mpi;