为sws_scale提供参数时出了什么问题?

时间:2019-04-30 11:46:08

标签: ffmpeg

在以下代码中,我无法弄清楚出了什么问题:

file://C:\conda-channel

这是使用dxva2获取tmp_frame的代码的一部分。我从hw_decode.c中启发了代码,并确保代码没有错误。 tmp_frame已正确制成NV12格式。该错误仅在我调用sws_scale时发生:

错误的src图像指针

所以我不知道如何提供指针以免出现此错误,并且sws_scale可能正常工作。 有想法吗?

我将问题更新为包括我的整个代码:

uint8_t *dstData[4];
int dstLinesize[4];
AVPixelFormat convertToPixFmt = AV_PIX_FMT_RGBA;
int ret;

// ...

printf("tmp_frame format: %d (%s) %dx%d\n", tmp_frame->format, av_get_pix_fmt_name((AVPixelFormat)tmp_frame->format), tmp_frame->width, tmp_frame->height);
// The above line prints: tmp_frame format: 23 (nv12) 480x480

int size = av_image_get_buffer_size(convertToPixFmt, tmp_frame->width, tmp_frame->height, 1);
uint8_t *buffer = (uint8_t *) av_malloc(size);

ret = av_image_copy_to_buffer(buffer, size,
    (const uint8_t * const *)&tmp_frame->data[i],
    (const int *)&tmp_frame->linesize[i], (AVPixelFormat)tmp_frame->format,
    tmp_frame->width, tmp_frame->height, 1);
ASSERT(ret >= 0);

ret = av_image_fill_arrays(dstData, dstLinesize, buffer, convertToPixFmt, dest_width, dest_height, 1);
ASSERT(ret >= 0);

ret = sws_scale(
    convertContext,
    dstData,
    dstLinesize,
    0,
    dest_width,
    convertedFrame->data,
    convertedFrame->linesize);
printf("sws_scale returns %d\n", ret);  // prints: sws_scale returns 0
ASSERT(ret == tmp_frame->height);

// ...

0 个答案:

没有答案