summaryrefslogtreecommitdiff
path: root/src/libcamera
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera')
-rw-r--r--src/libcamera/camera.cpp48
-rw-r--r--src/libcamera/include/pipeline_handler.h5
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp124
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp41
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp22
-rw-r--r--src/libcamera/pipeline/vimc.cpp22
-rw-r--r--src/libcamera/pipeline_handler.cpp2
-rw-r--r--src/libcamera/request.cpp30
8 files changed, 85 insertions, 209 deletions
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 20340167..3fe40feb 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -695,12 +695,6 @@ int Camera::configure(CameraConfiguration *config)
stream->configuration_ = cfg;
activeStreams_.insert(stream);
-
- /*
- * Allocate buffer objects in the pool.
- * Memory will be allocated and assigned later.
- */
- stream->createBuffers(cfg.memoryType, cfg.bufferCount);
}
state_ = CameraConfigured;
@@ -756,14 +750,6 @@ int Camera::freeBuffers()
if (!stateIs(CameraPrepared))
return -EACCES;
- for (Stream *stream : activeStreams_) {
- /*
- * All mappings must be destroyed before buffers can be freed
- * by the V4L2 device that has allocated them.
- */
- stream->destroyBuffers();
- }
-
state_ = CameraConfigured;
return pipe_->freeBuffers(this, activeStreams_);
@@ -834,24 +820,11 @@ int Camera::queueRequest(Request *request)
for (auto const &it : request->buffers()) {
Stream *stream = it.first;
- Buffer *buffer = it.second;
if (activeStreams_.find(stream) == activeStreams_.end()) {
LOG(Camera, Error) << "Invalid request";
return -EINVAL;
}
-
- if (stream->memoryType() == ExternalMemory) {
- int index = stream->mapBuffer(buffer);
- if (index < 0) {
- LOG(Camera, Error) << "No buffer memory available";
- return -ENOMEM;
- }
-
- buffer->index_ = index;
- }
-
- buffer->mem_ = &stream->buffers()[buffer->index_];
}
return pipe_->queueRequest(this, request);
@@ -880,6 +853,13 @@ int Camera::start()
LOG(Camera, Debug) << "Starting capture";
+ for (Stream *stream : activeStreams_) {
+ if (allocator_ && !allocator_->buffers(stream).empty())
+ continue;
+
+ pipe_->importFrameBuffers(this, stream);
+ }
+
int ret = pipe_->start(this);
if (ret)
return ret;
@@ -915,6 +895,13 @@ int Camera::stop()
pipe_->stop(this);
+ for (Stream *stream : activeStreams_) {
+ if (allocator_ && !allocator_->buffers(stream).empty())
+ continue;
+
+ pipe_->freeFrameBuffers(this, stream);
+ }
+
return 0;
}
@@ -928,13 +915,6 @@ int Camera::stop()
*/
void Camera::requestComplete(Request *request)
{
- for (auto it : request->buffers()) {
- Stream *stream = it.first;
- Buffer *buffer = it.second;
- if (stream->memoryType() == ExternalMemory)
- stream->unmapBuffer(buffer);
- }
-
requestCompleted.emit(request);
delete request;
}
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 560be3ba..27f3852c 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -21,12 +21,12 @@
namespace libcamera {
-class Buffer;
class Camera;
class CameraConfiguration;
class CameraManager;
class DeviceEnumerator;
class DeviceMatch;
+class FrameBuffer;
class MediaDevice;
class PipelineHandler;
class Request;
@@ -85,7 +85,8 @@ public:
int queueRequest(Camera *camera, Request *request);
- bool completeBuffer(Camera *camera, Request *request, Buffer *buffer);
+ bool completeBuffer(Camera *camera, Request *request,
+ FrameBuffer *buffer);
void completeRequest(Camera *camera, Request *request);
const char *name() const { return name_; }
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index b73f0f07..065f5d98 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -31,6 +31,8 @@ namespace libcamera {
LOG_DEFINE_CATEGORY(IPU3)
+class IPU3CameraData;
+
class ImgUDevice
{
public:
@@ -44,7 +46,6 @@ public:
V4L2VideoDevice *dev;
unsigned int pad;
std::string name;
- BufferPool *pool;
std::vector<std::unique_ptr<FrameBuffer>> buffers;
};
@@ -71,9 +72,7 @@ public:
int configureOutput(ImgUOutput *output,
const StreamConfiguration &cfg);
- int importOutputBuffers(ImgUOutput *output, BufferPool *pool);
- int exportOutputBuffers(ImgUOutput *output, BufferPool *pool);
- void freeBuffers();
+ void freeBuffers(IPU3CameraData *data);
int start();
int stop();
@@ -93,9 +92,6 @@ public:
ImgUOutput viewfinder_;
ImgUOutput stat_;
/* \todo Add param video device for 3A tuning */
-
- BufferPool vfPool_;
- BufferPool outPool_;
};
class CIO2Device
@@ -156,7 +152,7 @@ public:
{
}
- void imguOutputBufferReady(Buffer *buffer);
+ void imguOutputBufferReady(FrameBuffer *buffer);
void imguInputBufferReady(FrameBuffer *buffer);
void cio2BufferReady(FrameBuffer *buffer);
@@ -691,39 +687,30 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera,
goto error;
}
- /* Allocate buffers for each active stream. */
- for (Stream *s : streams) {
- IPU3Stream *stream = static_cast<IPU3Stream *>(s);
- ImgUDevice::ImgUOutput *dev = stream->device_;
-
- if (stream->memoryType() == InternalMemory)
- ret = imgu->exportOutputBuffers(dev, &stream->bufferPool());
- else
- ret = imgu->importOutputBuffers(dev, &stream->bufferPool());
- if (ret)
- goto error;
- }
-
/*
* Allocate buffers also on non-active outputs; use the same number
* of buffers as the active ones.
*/
if (!outStream->active_) {
- bufferCount = vfStream->configuration().bufferCount;
- outStream->device_->pool->createBuffers(bufferCount);
- ret = imgu->exportOutputBuffers(outStream->device_,
- outStream->device_->pool);
- if (ret)
+ ImgUDevice::ImgUOutput *output = outStream->device_;
+
+ ret = output->dev->exportBuffers(bufferCount, &output->buffers);
+ if (ret < 0) {
+ LOG(IPU3, Error) << "Failed to allocate ImgU "
+ << output->name << " buffers";
goto error;
+ }
}
if (!vfStream->active_) {
- bufferCount = outStream->configuration().bufferCount;
- vfStream->device_->pool->createBuffers(bufferCount);
- ret = imgu->exportOutputBuffers(vfStream->device_,
- vfStream->device_->pool);
- if (ret)
+ ImgUDevice::ImgUOutput *output = vfStream->device_;
+
+ ret = output->dev->exportBuffers(bufferCount, &output->buffers);
+ if (ret < 0) {
+ LOG(IPU3, Error) << "Failed to allocate ImgU "
+ << output->name << " buffers";
goto error;
+ }
}
return 0;
@@ -740,7 +727,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera,
IPU3CameraData *data = cameraData(camera);
data->cio2_.freeBuffers();
- data->imgu_->freeBuffers();
+ data->imgu_->freeBuffers(data);
return 0;
}
@@ -793,7 +780,7 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request)
for (auto it : request->buffers()) {
IPU3Stream *stream = static_cast<IPU3Stream *>(it.first);
- Buffer *buffer = it.second;
+ FrameBuffer *buffer = it.second;
int ret = stream->device_->dev->queueBuffer(buffer);
if (ret < 0)
@@ -920,9 +907,9 @@ int PipelineHandlerIPU3::registerCameras()
&IPU3CameraData::cio2BufferReady);
data->imgu_->input_->frameBufferReady.connect(data.get(),
&IPU3CameraData::imguInputBufferReady);
- data->imgu_->output_.dev->bufferReady.connect(data.get(),
+ data->imgu_->output_.dev->frameBufferReady.connect(data.get(),
&IPU3CameraData::imguOutputBufferReady);
- data->imgu_->viewfinder_.dev->bufferReady.connect(data.get(),
+ data->imgu_->viewfinder_.dev->frameBufferReady.connect(data.get(),
&IPU3CameraData::imguOutputBufferReady);
/* Create and register the Camera instance. */
@@ -971,7 +958,7 @@ void IPU3CameraData::imguInputBufferReady(FrameBuffer *buffer)
*
* Buffers completed from the ImgU output are directed to the application.
*/
-void IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
+void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
@@ -1046,7 +1033,6 @@ int ImgUDevice::init(MediaDevice *media, unsigned int index)
output_.pad = PAD_OUTPUT;
output_.name = "output";
- output_.pool = &outPool_;
viewfinder_.dev = V4L2VideoDevice::fromEntityName(media,
name_ + " viewfinder");
@@ -1056,7 +1042,6 @@ int ImgUDevice::init(MediaDevice *media, unsigned int index)
viewfinder_.pad = PAD_VF;
viewfinder_.name = "viewfinder";
- viewfinder_.pool = &vfPool_;
stat_.dev = V4L2VideoDevice::fromEntityName(media, name_ + " 3a stat");
ret = stat_.dev->open();
@@ -1165,68 +1150,27 @@ int ImgUDevice::configureOutput(ImgUOutput *output,
}
/**
- * \brief Export buffers from \a output to the provided \a pool
- * \param[in] output The ImgU output device
- * \param[in] pool The buffer pool where to export buffers
- *
- * Export memory buffers reserved in the video device memory associated with
- * \a output id to the buffer pool provided as argument.
- *
- * \return 0 on success or a negative error code otherwise
- */
-int ImgUDevice::exportOutputBuffers(ImgUOutput *output, BufferPool *pool)
-{
- int ret = output->dev->exportBuffers(pool);
- if (ret) {
- LOG(IPU3, Error) << "Failed to export ImgU "
- << output->name << " buffers";
- return ret;
- }
-
- return 0;
-}
-
-/**
- * \brief Reserve buffers in \a output from the provided \a pool
- * \param[in] output The ImgU output device
- * \param[in] pool The buffer pool used to reserve buffers in \a output
- *
- * Reserve a number of buffers equal to the number of buffers in \a pool
- * in the \a output device.
- *
- * \return 0 on success or a negative error code otherwise
- */
-int ImgUDevice::importOutputBuffers(ImgUOutput *output, BufferPool *pool)
-{
- int ret = output->dev->importBuffers(pool);
- if (ret) {
- LOG(IPU3, Error)
- << "Failed to import buffer in " << output->name
- << " ImgU device";
- return ret;
- }
-
- return 0;
-}
-
-/**
* \brief Release buffers for all the ImgU video devices
*/
-void ImgUDevice::freeBuffers()
+void ImgUDevice::freeBuffers(IPU3CameraData *data)
{
int ret;
- ret = output_.dev->releaseBuffers();
- if (ret)
- LOG(IPU3, Error) << "Failed to release ImgU output buffers";
+ if (!data->outStream_.active_) {
+ ret = output_.dev->releaseBuffers();
+ if (ret)
+ LOG(IPU3, Error) << "Failed to release ImgU output buffers";
+ }
ret = stat_.dev->releaseBuffers();
if (ret)
LOG(IPU3, Error) << "Failed to release ImgU stat buffers";
- ret = viewfinder_.dev->releaseBuffers();
- if (ret)
- LOG(IPU3, Error) << "Failed to release ImgU viewfinder buffers";
+ if (!data->vfStream_.active_) {
+ ret = viewfinder_.dev->releaseBuffers();
+ if (ret)
+ LOG(IPU3, Error) << "Failed to release ImgU viewfinder buffers";
+ }
ret = input_->releaseBuffers();
if (ret)
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index ba8f93e8..d669d2de 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -51,7 +51,7 @@ struct RkISP1FrameInfo {
FrameBuffer *paramBuffer;
FrameBuffer *statBuffer;
- Buffer *videoBuffer;
+ FrameBuffer *videoBuffer;
bool paramFilled;
bool paramDequeued;
@@ -67,7 +67,6 @@ public:
int destroy(unsigned int frame);
RkISP1FrameInfo *find(unsigned int frame);
- RkISP1FrameInfo *find(Buffer *buffer);
RkISP1FrameInfo *find(FrameBuffer *buffer);
RkISP1FrameInfo *find(Request *request);
@@ -87,7 +86,7 @@ public:
setDelay(QueueBuffers, -1, 10);
}
- void bufferReady(Buffer *buffer)
+ void bufferReady(FrameBuffer *buffer)
{
/*
* Calculate SOE by taking the end of DMA set by the kernel and applying
@@ -205,7 +204,7 @@ private:
int initLinks();
int createCamera(MediaEntity *sensor);
void tryCompleteRequest(Request *request);
- void bufferReady(Buffer *buffer);
+ void bufferReady(FrameBuffer *buffer);
void paramReady(FrameBuffer *buffer);
void statReady(FrameBuffer *buffer);
@@ -243,7 +242,7 @@ RkISP1FrameInfo *RkISP1Frames::create(unsigned int frame, Request *request, Stre
}
FrameBuffer *statBuffer = pipe_->availableStatBuffers_.front();
- Buffer *videoBuffer = request->findBuffer(stream);
+ FrameBuffer *videoBuffer = request->findBuffer(stream);
if (!videoBuffer) {
LOG(RkISP1, Error)
<< "Attempt to queue request with invalid stream";
@@ -296,26 +295,14 @@ RkISP1FrameInfo *RkISP1Frames::find(unsigned int frame)
return nullptr;
}
-RkISP1FrameInfo *RkISP1Frames::find(Buffer *buffer)
-{
- for (auto &itInfo : frameInfo_) {
- RkISP1FrameInfo *info = itInfo.second;
-
- if (info->videoBuffer == buffer)
- return info;
- }
-
- LOG(RkISP1, Error) << "Can't locate info from buffer";
- return nullptr;
-}
-
RkISP1FrameInfo *RkISP1Frames::find(FrameBuffer *buffer)
{
for (auto &itInfo : frameInfo_) {
RkISP1FrameInfo *info = itInfo.second;
if (info->paramBuffer == buffer ||
- info->statBuffer == buffer)
+ info->statBuffer == buffer ||
+ info->videoBuffer == buffer)
return info;
}
@@ -692,18 +679,9 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera,
const std::set<Stream *> &streams)
{
RkISP1CameraData *data = cameraData(camera);
- Stream *stream = *streams.begin();
unsigned int count = 1;
int ret;
- if (stream->memoryType() == InternalMemory)
- ret = video_->exportBuffers(&stream->bufferPool());
- else
- ret = video_->importBuffers(&stream->bufferPool());
-
- if (ret)
- return ret;
-
unsigned int maxBuffers = 0;
for (const Stream *s : camera->streams())
maxBuffers = std::max(maxBuffers, s->configuration().bufferCount);
@@ -769,9 +747,6 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera,
if (stat_->releaseBuffers())
LOG(RkISP1, Error) << "Failed to release stat buffers";
- if (video_->releaseBuffers())
- LOG(RkISP1, Error) << "Failed to release video buffers";
-
return 0;
}
@@ -975,7 +950,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
if (param_->open() < 0)
return false;
- video_->bufferReady.connect(this, &PipelineHandlerRkISP1::bufferReady);
+ video_->frameBufferReady.connect(this, &PipelineHandlerRkISP1::bufferReady);
stat_->frameBufferReady.connect(this, &PipelineHandlerRkISP1::statReady);
param_->frameBufferReady.connect(this, &PipelineHandlerRkISP1::paramReady);
@@ -1024,7 +999,7 @@ void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)
completeRequest(activeCamera_, request);
}
-void PipelineHandlerRkISP1::bufferReady(Buffer *buffer)
+void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
{
ASSERT(activeCamera_);
RkISP1CameraData *data = cameraData(activeCamera_);
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index b72841ed..66380e29 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -42,7 +42,7 @@ public:
}
int init(MediaEntity *entity);
- void bufferReady(Buffer *buffer);
+ void bufferReady(FrameBuffer *buffer);
V4L2VideoDevice *video_;
Stream stream_;
@@ -225,23 +225,13 @@ void PipelineHandlerUVC::freeFrameBuffers(Camera *camera, Stream *stream)
int PipelineHandlerUVC::allocateBuffers(Camera *camera,
const std::set<Stream *> &streams)
{
- UVCCameraData *data = cameraData(camera);
- Stream *stream = *streams.begin();
- const StreamConfiguration &cfg = stream->configuration();
-
- LOG(UVC, Debug) << "Requesting " << cfg.bufferCount << " buffers";
-
- if (stream->memoryType() == InternalMemory)
- return data->video_->exportBuffers(&stream->bufferPool());
- else
- return data->video_->importBuffers(&stream->bufferPool());
+ return 0;
}
int PipelineHandlerUVC::freeBuffers(Camera *camera,
const std::set<Stream *> &streams)
{
- UVCCameraData *data = cameraData(camera);
- return data->video_->releaseBuffers();
+ return 0;
}
int PipelineHandlerUVC::start(Camera *camera)
@@ -295,7 +285,7 @@ int PipelineHandlerUVC::processControls(UVCCameraData *data, Request *request)
int PipelineHandlerUVC::queueRequestDevice(Camera *camera, Request *request)
{
UVCCameraData *data = cameraData(camera);
- Buffer *buffer = request->findBuffer(&data->stream_);
+ FrameBuffer *buffer = request->findBuffer(&data->stream_);
if (!buffer) {
LOG(UVC, Error)
<< "Attempt to queue request with invalid stream";
@@ -362,7 +352,7 @@ int UVCCameraData::init(MediaEntity *entity)
if (ret)
return ret;
- video_->bufferReady.connect(this, &UVCCameraData::bufferReady);
+ video_->frameBufferReady.connect(this, &UVCCameraData::bufferReady);
/* Initialise the supported controls. */
const ControlInfoMap &controls = video_->controls();
@@ -402,7 +392,7 @@ int UVCCameraData::init(MediaEntity *entity)
return 0;
}
-void UVCCameraData::bufferReady(Buffer *buffer)
+void UVCCameraData::bufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 3fb5cacd..5e0f5c63 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -55,7 +55,7 @@ public:
}
int init(MediaDevice *media);
- void bufferReady(Buffer *buffer);
+ void bufferReady(FrameBuffer *buffer);
CameraSensor *sensor_;
V4L2Subdevice *debayer_;
@@ -291,23 +291,13 @@ void PipelineHandlerVimc::freeFrameBuffers(Camera *camera, Stream *stream)
int PipelineHandlerVimc::allocateBuffers(Camera *camera,
const std::set<Stream *> &streams)
{
- VimcCameraData *data = cameraData(camera);
- Stream *stream = *streams.begin();
- const StreamConfiguration &cfg = stream->configuration();
-
- LOG(VIMC, Debug) << "Requesting " << cfg.bufferCount << " buffers";
-
- if (stream->memoryType() == InternalMemory)
- return data->video_->exportBuffers(&stream->bufferPool());
- else
- return data->video_->importBuffers(&stream->bufferPool());
+ return 0;
}
int PipelineHandlerVimc::freeBuffers(Camera *camera,
const std::set<Stream *> &streams)
{
- VimcCameraData *data = cameraData(camera);
- return data->video_->releaseBuffers();
+ return 0;
}
int PipelineHandlerVimc::start(Camera *camera)
@@ -355,7 +345,7 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
int PipelineHandlerVimc::queueRequestDevice(Camera *camera, Request *request)
{
VimcCameraData *data = cameraData(camera);
- Buffer *buffer = request->findBuffer(&data->stream_);
+ FrameBuffer *buffer = request->findBuffer(&data->stream_);
if (!buffer) {
LOG(VIMC, Error)
<< "Attempt to queue request with invalid stream";
@@ -447,7 +437,7 @@ int VimcCameraData::init(MediaDevice *media)
if (video_->open())
return -ENODEV;
- video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
+ video_->frameBufferReady.connect(this, &VimcCameraData::bufferReady);
raw_ = new V4L2VideoDevice(media->getEntityByName("Raw Capture 1"));
if (raw_->open())
@@ -484,7 +474,7 @@ int VimcCameraData::init(MediaDevice *media)
return 0;
}
-void VimcCameraData::bufferReady(Buffer *buffer)
+void VimcCameraData::bufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 11d68456..f6fb0974 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -472,7 +472,7 @@ int PipelineHandler::queueRequest(Camera *camera, Request *request)
* otherwise
*/
bool PipelineHandler::completeBuffer(Camera *camera, Request *request,
- Buffer *buffer)
+ FrameBuffer *buffer)
{
camera->bufferCompleted.emit(request, buffer);
return request->completeBuffer(buffer);
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 4268e314..ea33736f 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -75,11 +75,6 @@ Request::Request(Camera *camera, uint64_t cookie)
Request::~Request()
{
- for (auto it : bufferMap_) {
- Buffer *buffer = it.second;
- delete buffer;
- }
-
delete metadata_;
delete controls_;
delete validator_;
@@ -106,18 +101,19 @@ Request::~Request()
* \brief Retrieve the request's streams to buffers map
*
* Return a reference to the map that associates each Stream part of the
- * request to the Buffer the Stream output should be directed to.
+ * request to the FrameBuffer the Stream output should be directed to.
*
- * \return The map of Stream to Buffer
+ * \return The map of Stream to FrameBuffer
*/
/**
- * \brief Store a Buffer with its associated Stream in the Request
+ * \brief Add a FrameBuffer with its associated Stream to the Request
* \param[in] stream The stream the buffer belongs to
- * \param[in] buffer The Buffer to store in the request
+ * \param[in] buffer The FrameBuffer to add to the request
*
- * Ownership of the buffer is passed to the request. It will be deleted when
- * the request is destroyed after completing.
+ * A reference to the buffer is stored in the request. The caller is responsible
+ * for ensuring that the buffer will remain valid until the request complete
+ * callback is called.
*
* A request can only contain one buffer per stream. If a buffer has already
* been added to the request for the same stream, this method returns -EEXIST.
@@ -126,7 +122,7 @@ Request::~Request()
* \retval -EEXIST The request already contains a buffer for the stream
* \retval -EINVAL The buffer does not reference a valid Stream
*/
-int Request::addBuffer(Stream *stream, std::unique_ptr<Buffer> buffer)
+int Request::addBuffer(Stream *stream, FrameBuffer *buffer)
{
if (!stream) {
LOG(Request, Error) << "Invalid stream reference";
@@ -135,13 +131,13 @@ int Request::addBuffer(Stream *stream, std::unique_ptr<Buffer> buffer)
auto it = bufferMap_.find(stream);
if (it != bufferMap_.end()) {
- LOG(Request, Error) << "Buffer already set for stream";
+ LOG(Request, Error) << "FrameBuffer already set for stream";
return -EEXIST;
}
buffer->request_ = this;
- pending_.insert(buffer.get());
- bufferMap_[stream] = buffer.release();
+ pending_.insert(buffer);
+ bufferMap_[stream] = buffer;
return 0;
}
@@ -161,7 +157,7 @@ int Request::addBuffer(Stream *stream, std::unique_ptr<Buffer> buffer)
* \return The buffer associated with the stream, or nullptr if the stream is
* not part of this request
*/
-Buffer *Request::findBuffer(Stream *stream) const
+FrameBuffer *Request::findBuffer(Stream *stream) const
{
auto it = bufferMap_.find(stream);
if (it == bufferMap_.end())
@@ -231,7 +227,7 @@ void Request::complete()
* \return True if all buffers contained in the request have completed, false
* otherwise
*/
-bool Request::completeBuffer(Buffer *buffer)
+bool Request::completeBuffer(FrameBuffer *buffer)
{
int ret = pending_.erase(buffer);
ASSERT(ret == 1);