Как обрезать NV21 с ConvertToI420 c ++? - PullRequest
0 голосов
/ 25 июня 2019

Я получаю изображение nv21 с камеры, теперь я хочу обрезать его по специальному прямоугольнику, я попытался использовать ConvertToI420, но кажется, что это не удалось.

ConvertToI420

int yuv_crop_image (unsigned char *src_data,unsigned int height ,unsigned int width,unsigned int src_length,
                    unsigned char *dst_data,unsigned int top,unsigned int left,unsigned int dst_width,unsigned int dst_height)                                             
{
    if (left + dst_width > width || top + dst_height > height) 
    {
        return -1;
    }


    if (left % 2 != 0 || top % 2 != 0) {
        return -1;
    }

    unsigned int dst_i420_y_size = dst_width * dst_height;
    unsigned int dst_i420_u_size = (dst_width >> 1) * (dst_height >> 1);

    unsigned char *dst_i420_data   = dst_data;
    unsigned char *dst_i420_y_data = dst_i420_data;
    unsigned char *dst_i420_u_data = dst_i420_data + dst_i420_y_size;
    unsigned char *dst_i420_v_data = dst_i420_data + dst_i420_y_size + dst_i420_u_size;

    int ret = libyuv::ConvertToI420((const unsigned char *) src_data, src_length,
                          (unsigned char *) dst_i420_y_data, dst_width,
                          (unsigned char *) dst_i420_u_data, dst_width >> 1,
                          (unsigned char *) dst_i420_v_data, dst_width >> 1,
                          left, top,
                          width, height,
                          dst_width, dst_height,
                         libyuv::kRotate0, libyuv::FOURCC_NV21);
    printf("!!ret = %d\n",ret);
}

Iпоймите что-то не так

...