161 uint32_t quality = 0;
175 double min = 0, max = 0, inc = 0;
177 return { min, max, inc };
189 static inline std::vector<PEAK_IPL_VIDEO_ENCODER> GetSupportedEncodersForAContainer(
PEAK_IPL_VIDEO_CONTAINER container)
195 std::vector<PEAK_IPL_VIDEO_ENCODER> encoders(length);
198 container, encoders.data(), &length);
217 std::vector<PixelFormatName> formats(sizeOfData);
220 encoder, reinterpret_cast<PEAK_IPL_PIXEL_FORMAT*>(formats.data()), &sizeOfData);
239 return std::unique_ptr<MJPEGEncoder>(
new MJPEGEncoder());
304 m_handle, option, value, count, outCount);
388 static inline std::vector<PEAK_IPL_VIDEO_CONTAINER> GetSupportedContainersForAnEncoder(
PEAK_IPL_VIDEO_ENCODER encoder)
394 std::vector<PEAK_IPL_VIDEO_CONTAINER> containers(length);
397 encoder, containers.data(), &length);
416 return std::unique_ptr<AVIContainer>(
new AVIContainer());
444 other.m_handle =
nullptr;
445 m_encoder = std::move(other.m_encoder);
446 m_container = std::move(other.m_container);
452 other.m_handle =
nullptr;
453 m_encoder = std::move(other.m_encoder);
454 m_container = std::move(other.m_container);
471 void Open(
const std::string& fileName, std::shared_ptr<container::IContainer> container,
472 std::shared_ptr<encoder::IEncoder> encoder)
474 if (!container || !encoder)
481 &
m_handle, fileName.c_str(), container->Id(), encoder->Id());
484 m_container = container;
500 void Open(
const std::string& fileName)
504 Open(fileName, std::move(container), std::move(encoder));
553 if (m_encoder ==
nullptr)
559 m_handle, ImageBackendAccessor::BackendHandle(image));
574 std::shared_ptr<encoder::IEncoder>
Encoder()
const 583 std::shared_ptr<container::IContainer>
Container()
const 594 uint64_t numFramesEncoded{};
597 return numFramesEncoded;
606 uint64_t numFramesDropped{};
609 return numFramesDropped;
665 int32_t minQueueSize{}, maxQueueSize{};
670 return {minQueueSize, maxQueueSize, 1};
711 std::shared_ptr<encoder::IEncoder> m_encoder{};
712 std::shared_ptr<container::IContainer> m_container{};
void SetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, const void *value, size_t count)
Sets an option on the container.
Definition: peak_ipl_video_writer.hpp:281
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Container_OptionRange(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_ENCODER_OPTION option, void *min, void *max, void *inc)
Receive the range for an option of the container.
void SetQuality(uint32_t quality)
Sets the quality for the jpeg encoder.
Definition: peak_ipl_video_writer.hpp:147
std::shared_ptr< encoder::IEncoder > Encoder() const
Get the used encoder.
Definition: peak_ipl_video_writer.hpp:574
VideoWriter & operator<<(const Image &image)
Append an image to the opened video.
Definition: peak_ipl_video_writer.hpp:564
Writes images to a file in form of a video.
Definition: peak_ipl_video_writer.hpp:429
Encoder Interface Class.
Definition: peak_ipl_video_writer.hpp:37
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition: peak_ipl_video_writer.hpp:44
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_Open(PEAK_IPL_VIDEO_HANDLE *videoHandle, const char *filePath, PEAK_IPL_VIDEO_CONTAINER container, PEAK_IPL_VIDEO_ENCODER encoder)
Open a video stream.
#define PEAK_IPL_C_ABI_PREFIX
Definition: peak_ipl_dll_defines.h:16
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_GetFileSize(PEAK_IPL_VIDEO_HANDLE videoHandle, uint64_t *fileSize)
Gets the file size of the video.
struct PEAK_IPL_VIDEO * PEAK_IPL_VIDEO_HANDLE
Definition: peak_ipl_backend.h:279
virtual PEAK_IPL_VIDEO_ENCODER Id()=0
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition: peak_ipl_video_writer.hpp:260
uint64_t NumFramesEncoded() const
Get the encoded frames in the video stream.
Definition: peak_ipl_video_writer.hpp:592
JPEG encoder specialization of IEncoder. Create the encoder with the according Create function...
Definition: peak_ipl_video_writer.hpp:116
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_GetDroppedFrames(PEAK_IPL_VIDEO_HANDLE videoHandle, uint64_t *numFrames)
Gets the number of dropped frames in the video stream.
The "peak::ipl" namespace contains the whole image processing library.
Definition: peak_ipl_binning.hpp:16
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_IsOpen(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_BOOL8 *isOpen)
Check if the video stream is open.
std::shared_ptr< container::IContainer > Container() const
Get the used container.
Definition: peak_ipl_video_writer.hpp:583
void GetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, void *value, size_t count, size_t *outCount)
Gets an option of the encoder.
Definition: peak_ipl_video_writer.hpp:83
~VideoWriter()
Definition: peak_ipl_video_writer.hpp:433
Definition: peak_ipl_backend.h:219
int32_t NumBuffersQueued()
Get the count of the currently queued buffers, which are waiting to be processed. ...
Definition: peak_ipl_video_writer.hpp:677
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_GetEncodedFrames(PEAK_IPL_VIDEO_HANDLE videoHandle, uint64_t *numFrames)
Gets the number of encoded frames in the video stream.
uint16_t PEAK_IPL_VIDEO_ENCODER
Definition: peak_ipl_backend.h:215
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition: peak_ipl_exception.hpp:182
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_ResetFrameCounters(PEAK_IPL_VIDEO_HANDLE videoHandle)
Reset compressed and dropped frame counters.
Stores the pixel format, width and height of an image and the pointer to the image buffer...
Definition: peak_ipl_image.hpp:37
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Queue_GetSize(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t *size)
Get the internal queue size of the video writer.
Range< int32_t > QueueSizeRange()
Get the range of the queue size.
Definition: peak_ipl_video_writer.hpp:663
PEAK_IPL_VIDEO_ENCODER Id() override
Get the current type of the encoder.
Definition: peak_ipl_video_writer.hpp:133
uint64_t FileSize() const
Get the file size of the video in bytes.
Definition: peak_ipl_video_writer.hpp:616
void OptionRange(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void *min, void *max, void *inc)
Receive the range for an option of the container.
Definition: peak_ipl_video_writer.hpp:320
void Append(const Image &image)
Append an image to the opened video.
Definition: peak_ipl_video_writer.hpp:551
void WaitUntilFrameDone(int32_t timeout_ms)
Wait until frame processing is done.
Definition: peak_ipl_video_writer.hpp:691
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Encoder_OptionRange(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_ENCODER_OPTION option, void *min, void *max, void *inc)
Receive the range for an option of the encoder.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_WaitUntilFrameDone(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t timeout_ms)
Wait until frame processing is done.
The exception thrown when passing an invalid parameter to a function.
Definition: peak_ipl_exception.hpp:58
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Queue_GetRange(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t *minSize, int32_t *maxSize)
Get the possible range of the internal queue size.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_GetSupportedContainersForAnEncoder(PEAK_IPL_VIDEO_ENCODER encoder, PEAK_IPL_VIDEO_CONTAINER *containers, size_t *size)
Get the supported containers for an encoder.
void SetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, const void *value, size_t count)
Sets an option on the encoder.
Definition: peak_ipl_video_writer.hpp:65
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Encoder_GetOption(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_ENCODER_OPTION option, void *value, size_t count, size_t *outCount)
Sets an option of the encoder.
Range< double > QualityRange()
Gets the quality range for the jpeg encoder.
Definition: peak_ipl_video_writer.hpp:173
void SetQueueSize(int32_t queueSize)
Set the internal queue size of the video writer.
Definition: peak_ipl_video_writer.hpp:638
double GetFramerate()
Get the frame rate for the opened video.
Definition: peak_ipl_video_writer.hpp:376
Definition: peak_ipl_backend.h:225
Range.
Definition: peak_ipl_range.hpp:30
Container Interface Class.
Definition: peak_ipl_video_writer.hpp:254
void OptionRange(PEAK_IPL_VIDEO_ENCODER_OPTION option, void *min, void *max, void *inc)
Receive the range for an option of the encoder.
Definition: peak_ipl_video_writer.hpp:102
VideoWriter(VideoWriter &&other) noexcept
Definition: peak_ipl_video_writer.hpp:441
int8_t PEAK_IPL_BOOL8
Definition: peak_ipl_backend.h:25
VideoWriter & operator=(VideoWriter &&other) noexcept
Definition: peak_ipl_video_writer.hpp:449
void Open(const std::string &fileName)
Open the VideoWriter with AVI container and mjpeg encoder. The file is created upon receiving the fir...
Definition: peak_ipl_video_writer.hpp:500
void Close()
Close the opened VideoWriter.
Definition: peak_ipl_video_writer.hpp:531
uint16_t PEAK_IPL_VIDEO_ENCODER_OPTION
Definition: peak_ipl_backend.h:221
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_Append(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_IMAGE_HANDLE imageHandle)
Append an image to the video stream.
void SetFramerate(double fps)
Set the frame rate for the opened video.
Definition: peak_ipl_video_writer.hpp:364
bool IsOpen() const
Check if the VideoWriter is already open.
Definition: peak_ipl_video_writer.hpp:516
void ResetFrameCounters()
Reset compressed and dropped frame counters.
Definition: peak_ipl_video_writer.hpp:627
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_WaitUntilQueueEmpty(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t timeout_ms)
Wait until queue is empty.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_GetSupportedEncodersForAContainer(PEAK_IPL_VIDEO_CONTAINER container, PEAK_IPL_VIDEO_ENCODER *encoders, size_t *size)
Get the supported encoders for a container.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Encoder_SetOption(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_ENCODER_OPTION option, const void *value, size_t count)
Sets an option on the encoder.
void GetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void *value, size_t count, size_t *outCount)
Gets an option of the container.
Definition: peak_ipl_video_writer.hpp:300
void WaitUntilQueueEmpty(int32_t timeout_ms)
Wait until the queue is empty.
Definition: peak_ipl_video_writer.hpp:702
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Queue_SetSize(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t size)
Set the internal queue size of the video writer.
uint16_t PEAK_IPL_VIDEO_CONTAINER_OPTION
Definition: peak_ipl_backend.h:227
void Open(const std::string &fileName, std::shared_ptr< container::IContainer > container, std::shared_ptr< encoder::IEncoder > encoder)
Open the VideoWriter and setup a container and an encoder. The file is created upon receiving the fir...
Definition: peak_ipl_video_writer.hpp:471
uint16_t PEAK_IPL_VIDEO_CONTAINER
Definition: peak_ipl_backend.h:208
virtual ~IEncoder()=default
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Queue_GetQueued(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t *queued)
Get the count of the currently queued buffers.
Definition: peak_ipl_backend.h:206
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Encoder_GetSupportedPixelFormats(PEAK_IPL_VIDEO_ENCODER encoder, PEAK_IPL_PIXEL_FORMAT *pixelFormatList, size_t *pixelFormatListSize)
Get the supported pixelformats for an encoder.
uint64_t NumFramesDropped() const
Get the dropped frames in the video stream.
Definition: peak_ipl_video_writer.hpp:604
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Container_SetOption(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_CONTAINER_OPTION option, const void *value, size_t count)
Sets an option on the container.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Container_GetOption(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_VIDEO_ENCODER_OPTION option, void *value, size_t count, size_t *outCount)
Gets an option of the container.
AVI container specialization of IContainer. Create the container with the according Create function...
Definition: peak_ipl_video_writer.hpp:334
int32_t QueueSize()
Get the internal queue size of the video writer.
Definition: peak_ipl_video_writer.hpp:649
Definition: peak_ipl_backend.h:213
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_Close(PEAK_IPL_VIDEO_HANDLE videoHandle)
Close the video stream.
PEAK_IPL_VIDEO_HANDLE m_handle
Definition: peak_ipl_video_writer.hpp:42
uint32_t GetQuality()
Gets the quality for the jpeg encoder.
Definition: peak_ipl_video_writer.hpp:159
PEAK_IPL_VIDEO_CONTAINER Id() override
Get the current type of the container.
Definition: peak_ipl_video_writer.hpp:350