MCPcopy Create free account
hub / github.com/CVCUDA/CV-CUDA / WrapExternalBufferVector

Method WrapExternalBufferVector

python/mod_cvcuda/nvcv/Image.cpp:634–676  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

632}
633
634std::shared_ptr<Image> Image::WrapExternalBufferVector(std::vector<py::object> buffers, nvcv::ImageFormat fmt)
635{
636 std::vector<std::shared_ptr<ExternalBuffer>> spBuffers;
637 for (auto &obj : buffers)
638 {
639 std::shared_ptr<ExternalBuffer> buffer = cast_py_object_as<ExternalBuffer>(obj);
640 if (!buffer)
641 throw std::runtime_error("Input buffer doesn't provide cuda_array_interface or DLPack interfaces");
642 spBuffers.push_back(std::move(buffer));
643 }
644
645 std::vector<DLPackTensor> bufinfos;
646
647 for (size_t i = 0; i < spBuffers.size(); ++i)
648 {
649 bufinfos.emplace_back(spBuffers[i]->dlTensor());
650 }
651
652 nvcv::ImageDataStridedCuda imgData = CreateNVCVImageDataCuda(std::move(bufinfos), fmt);
653
654 // This is the key of an image wrapper.
655 // All image wrappers have the same key.
656 Image::Key key;
657
658 std::shared_ptr<CacheItem> item = Cache::Instance().fetchOne(key);
659
660 // None found?
661 if (!item)
662 {
663 // Need to add wrappers into cache so that they don't get destroyed by
664 // the cuda stream when they're last used, and python script isn't
665 // holding a reference to them. If we don't do it, things might break.
666 std::shared_ptr<Image> img(new Image(std::move(spBuffers), imgData));
667 Cache::Instance().add(*img);
668 return img;
669 }
670 else
671 {
672 std::shared_ptr<Image> img = std::static_pointer_cast<Image>(item);
673 img->setWrapData(std::move(spBuffers), imgData);
674 return img;
675 }
676}
677
678void Image::setWrapData(std::vector<std::shared_ptr<ExternalBuffer>> bufs, const nvcv::ImageDataStridedCuda &imgData)
679{

Callers

nothing calls this directly

Calls 7

CreateNVCVImageDataCudaFunction · 0.85
fetchOneMethod · 0.80
setWrapDataMethod · 0.80
push_backMethod · 0.45
sizeMethod · 0.45
emplace_backMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected