Есть ли способ сделать это? Что, если на ПК есть две или более карты GPU? контекст-> hwframe он не работает. < /p>
Код: Выделить всё
int copy_frame_to_buffer(void* handle, void* buffer, int bufferSize)
{
int ret = 0;
int calculatedBufferSize;
VideoDecoderContext* context = static_cast(handle);
calculatedBufferSize = av_image_get_buffer_size(static_cast(context->frame->format), context->frame->width, context->frame->height, 1);
if (calculatedBufferSize != bufferSize)
{
fprintf(stderr, "Calculated buffer (%d) is not equal to bufferSize (%d).\n", calculatedBufferSize, bufferSize);
return -1;
}
uint8_t* byte_buffer = static_cast(buffer);
ret = av_image_copy_to_buffer(byte_buffer, calculatedBufferSize,
(const uint8_t* const*)context->frame->data,
(const int*)context->frame->linesize, static_cast(context->frame->format),
context->frame->width, context->frame->height, 1);
if (ret < 0) {
fprintf(stderr, "Can not copy image to buffer\n");
return ret;
}
return ret;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... pencv-umat