Anonymous
FFMPEG D3D11 Декодированное изображение в OpenCV UMAT
Сообщение
Anonymous » 07 мар 2025, 15:00
Я хотел бы скопировать Decode Data Ffmpeg изображения в UMAT, не копируя их в ОЗУ процессора.
Есть ли способ сделать это? Что, если на ПК есть две или более карты 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
1741348842
Anonymous
Я хотел бы скопировать Decode Data Ffmpeg изображения в UMAT, не копируя их в ОЗУ процессора. Есть ли способ сделать это? Что, если на ПК есть две или более карты GPU? контекст-> hwframe он не работает. < /p> [code]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; } [/code] заранее спасибо! Подробнее здесь: [url]https://stackoverflow.com/questions/79492258/ffmpeg-d3d11-decoded-image-to-opencv-umat[/url]