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

Method WrapExternalBufferMany

python/mod_cvcuda/nvcv/Image.cpp:588–632  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

586}
587
588std::vector<std::shared_ptr<Image>> Image::WrapExternalBufferMany(std::vector<std::shared_ptr<ExternalBuffer>> &buffers,
589 nvcv::ImageFormat fmt)
590{
591 // This is the key of an image wrapper.
592 // All image wrappers have the same key.
593 Image::Key key;
594
595 std::vector<std::shared_ptr<CacheItem>> items = Cache::Instance().fetch(key);
596
597 std::vector<std::shared_ptr<Image>> out;
598 out.reserve(buffers.size());
599
600 for (size_t i = 0; i < buffers.size(); ++i)
601 {
602 std::vector<std::shared_ptr<ExternalBuffer>> spBuffers;
603 spBuffers.push_back(buffers[i]);
604
605 if (!spBuffers.back())
606 throw std::runtime_error("Input buffer doesn't provide cuda_array_interface or DLPack interfaces");
607
608 std::vector<DLPackTensor> bufinfos;
609 bufinfos.emplace_back(spBuffers[0]->dlTensor());
610 nvcv::ImageDataStridedCuda imgData = CreateNVCVImageDataCuda(bufinfos, fmt);
611
612 // None found?
613 if (items.empty())
614 {
615 // Need to add wrappers into cache so that they don't get destroyed by
616 // the cuda stream when they're last used, and python script isn't
617 // holding a reference to them. If we don't do it, things might break.
618 std::shared_ptr<Image> img(new Image(std::move(spBuffers), imgData));
619 Cache::Instance().add(*img);
620 out.push_back(img);
621 }
622 else
623 {
624 std::shared_ptr<Image> img = std::static_pointer_cast<Image>(items.back());
625 items.pop_back();
626 img->setWrapData(std::move(spBuffers), imgData);
627 out.push_back(img);
628 }
629 }
630
631 return out;
632}
633
634std::shared_ptr<Image> Image::WrapExternalBufferVector(std::vector<py::object> buffers, nvcv::ImageFormat fmt)
635{

Callers

nothing calls this directly

Calls 11

CreateNVCVImageDataCudaFunction · 0.85
reserveMethod · 0.80
backMethod · 0.80
pop_backMethod · 0.80
setWrapDataMethod · 0.80
fetchMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
emplace_backMethod · 0.45
emptyMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected