IDS peak IPL v1.17.2
Loading...
Searching...
No Matches
peak_ipl_video_writer.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
18
19#include <cstdint>
20#include <memory>
21#include <string>
22#include <utility>
23
24namespace peak
25{
26namespace ipl
27{
28
29class VideoWriter;
30
31namespace encoder
32{
33
39{
41
42protected:
44
46 {
47 this->m_handle = handle;
48 }
49
50public:
51 IEncoder() = default;
52 virtual ~IEncoder() = default;
54
66 void SetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, const void* value, size_t count)
67 {
69 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Encoder_SetOption(m_handle, option, value, count); });
70 }
71
84 void GetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, void* value, size_t count, size_t* outCount)
85 {
87 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Encoder_GetOption(m_handle, option, value, count, outCount);
88 });
89 }
90
103 void OptionRange(PEAK_IPL_VIDEO_ENCODER_OPTION option, void* min, void* max, void* inc)
104 {
107 });
108 }
109};
110
111static std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder);
112
118class MJPEGEncoder : public IEncoder
119{
120 friend std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder);
121
122 MJPEGEncoder() = default;
123
124public:
125 MJPEGEncoder(const MJPEGEncoder&) = delete;
126 MJPEGEncoder(MJPEGEncoder&&) = default;
127
128 MJPEGEncoder& operator=(const MJPEGEncoder&) = delete;
129 MJPEGEncoder& operator=(MJPEGEncoder&&) = default;
130
136 {
138 }
139
149 void SetQuality(uint32_t quality)
150 {
151 SetOption(PEAK_IPL_VIDEO_ENCODER_OPTION_QUALITY, &quality, sizeof(quality));
152 }
153
161 uint32_t GetQuality()
162 {
163 uint32_t quality = 0;
164 GetOption(PEAK_IPL_VIDEO_ENCODER_OPTION_QUALITY, &quality, sizeof(quality), nullptr);
165 return quality;
166 }
167
176 {
177 double min = 0, max = 0, inc = 0;
179 return { min, max, inc };
180 }
181};
182
192static inline std::vector<PEAK_IPL_VIDEO_ENCODER> GetSupportedEncodersForAContainer(PEAK_IPL_VIDEO_CONTAINER container)
193{
194 size_t length{};
197 });
198 std::vector<PEAK_IPL_VIDEO_ENCODER> encoders(length);
201 container, encoders.data(), &length);
202 });
203 return encoders;
204}
205
215static inline std::vector<PixelFormatName> GetSupportedPixelFormats(PEAK_IPL_VIDEO_ENCODER encoder)
216{
217 size_t sizeOfData{};
220 });
221 std::vector<PixelFormatName> formats(sizeOfData);
224 encoder, reinterpret_cast<PEAK_IPL_PIXEL_FORMAT*>(formats.data()), &sizeOfData);
225 });
226 return formats;
227}
228
239static inline std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder)
240{
241 switch (encoder)
242 {
244 return std::unique_ptr<MJPEGEncoder>(new MJPEGEncoder());
245 default:
246 throw InvalidArgumentException("The supplied encoder is not a valid value!");
247 }
248
249}
250
251} // namespace encoder
252
253namespace container
254{
255
261{
263
264protected:
267 {
268 this->m_handle = handle;
269 }
270
271public:
272 IContainer() = default;
273 virtual ~IContainer() = default;
275
287 void SetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, const void* value, size_t count)
288 {
291 });
292 }
293
306 void GetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void* value, size_t count, size_t* outCount)
307 {
310 m_handle, option, value, count, outCount);
311 });
312 }
313
327 void OptionRange(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void* min, void* max, void* inc)
328 {
331 });
332 }
333};
334
335static std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container);
336
342class AVIContainer : public IContainer
343{
344 friend std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container);
345 AVIContainer() = default;
346
347public:
348 AVIContainer(const AVIContainer&) = delete;
349 AVIContainer(AVIContainer&&) = default;
350
351 AVIContainer& operator=(const AVIContainer&) = delete;
352 AVIContainer& operator=(AVIContainer&&) = default;
353
359 {
361 }
362
372 void SetFramerate(double fps)
373 {
375 }
376
385 {
386 double fps = 0;
387 GetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION_FRAMERATE, &fps, sizeof(fps), nullptr);
388 return fps;
389 }
390};
391
397static inline std::vector<PEAK_IPL_VIDEO_CONTAINER> GetSupportedContainersForAnEncoder(PEAK_IPL_VIDEO_ENCODER encoder)
398{
399 size_t length{};
402 });
403 std::vector<PEAK_IPL_VIDEO_CONTAINER> containers(length);
406 encoder, containers.data(), &length);
407 });
408 return containers;
409}
410
423static std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container)
424{
425 switch (container)
426 {
428 return std::unique_ptr<AVIContainer>(new AVIContainer());
429 default:
430 throw InvalidArgumentException("The supplied container is not a valid value!");
431 }
432}
433
434} // namespace container
435
436class Image;
437
442class VideoWriter final
443{
444public:
445 VideoWriter() = default;
447 {
448 if(IsOpen())
449 {
450 Close();
451 }
452 }
453 VideoWriter(const VideoWriter&) = delete;
454 VideoWriter(VideoWriter&& other) noexcept
455 {
456 m_handle = other.m_handle;
457 other.m_handle = nullptr;
458 m_encoder = std::move(other.m_encoder);
459 m_container = std::move(other.m_container);
460 }
463 {
464 m_handle = other.m_handle;
465 other.m_handle = nullptr;
466 m_encoder = std::move(other.m_encoder);
467 m_container = std::move(other.m_container);
468
469 return *this;
470 }
471
485 void Open(const std::string& fileName, std::shared_ptr<container::IContainer> container,
486 std::shared_ptr<encoder::IEncoder> encoder)
487 {
488 if (!container || !encoder)
489 {
490 throw InvalidArgumentException("The given pointer is a null pointer!");
491 }
492
495 &m_handle, fileName.c_str(), container->Id(), encoder->Id());
496 });
497 m_encoder = encoder;
498 m_container = container;
499
500 m_encoder->SetHandle(m_handle);
501 m_container->SetHandle(m_handle);
502 }
503
514 void Open(const std::string& fileName)
515 {
518 Open(fileName, std::move(container), std::move(encoder));
519 }
520
531 {
532 PEAK_IPL_BOOL8 isOpen = 0;
534 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_IsOpen(m_handle, &isOpen); });
535 return isOpen != 0;
536 }
537
545 void Close()
546 {
548
549 m_handle = nullptr;
550 }
551
565 void Append(const Image& image)
566 {
567 if (m_encoder == nullptr)
568 {
569 throw InvalidArgumentException("The open method must be called before append!");
570 }
573 m_handle, ImageBackendAccessor::BackendHandle(image));
574 });
575 }
576
579 {
580 Append(image);
581 return *this;
582 }
583
588 PEAK_IPL_NO_DISCARD std::shared_ptr<encoder::IEncoder> Encoder() const
589 {
590 return m_encoder;
591 }
592
597 PEAK_IPL_NO_DISCARD std::shared_ptr<container::IContainer> Container() const
598 {
599 return m_container;
600 }
601
607 {
608 uint64_t numFramesEncoded{};
610 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_GetEncodedFrames(m_handle, &numFramesEncoded); });
611 return numFramesEncoded;
612 }
613
619 {
620 uint64_t numFramesDropped{};
622 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_GetDroppedFrames(m_handle, &numFramesDropped); });
623 return numFramesDropped;
624 }
625
631 {
632 uint64_t s{};
635 return s;
636 }
637
647
652 void SetQueueSize(int32_t queueSize)
653 {
656 });
657 }
658
664 {
665 int32_t queueSize{};
668 });
669
670 return queueSize;
671 }
672
678 {
679 int32_t minQueueSize{}, maxQueueSize{};
681 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Queue_GetRange(m_handle, &minQueueSize, &maxQueueSize);
682 });
683
684 return {minQueueSize, maxQueueSize, 1};
685 }
686
692 {
693 int32_t queued{};
696 });
697
698 return queued;
699 }
700
705 void WaitUntilFrameDone(int32_t timeout_ms)
706 {
709 });
710 }
711
716 void WaitUntilQueueEmpty(int32_t timeout_ms)
717 {
720 });
721 }
722
723private:
724 PEAK_IPL_VIDEO_HANDLE m_handle{nullptr};
725 std::shared_ptr<encoder::IEncoder> m_encoder{};
726 std::shared_ptr<container::IContainer> m_container{};
727};
728
729} /* namespace ipl */
730} /* namespace peak */
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:47
The exception thrown when passing an invalid parameter to a function.
Definition peak_ipl_exception.hpp:84
Range support and convenience class.
Definition peak_ipl_range.hpp:35
Writes images to a file in the form of a video.
Definition peak_ipl_video_writer.hpp:443
void Open(const std::string &fileName, std::shared_ptr< container::IContainer > container, std::shared_ptr< encoder::IEncoder > encoder)
Open the VideoWriter and sets up a container and an encoder. The file is created upon receiving the f...
Definition peak_ipl_video_writer.hpp:485
VideoWriter(const VideoWriter &)=delete
VideoWriter(VideoWriter &&other) noexcept
Definition peak_ipl_video_writer.hpp:454
Range< int32_t > QueueSizeRange()
Get the range of the queue size.
Definition peak_ipl_video_writer.hpp:677
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:514
void WaitUntilFrameDone(int32_t timeout_ms)
Wait until frame processing is done.
Definition peak_ipl_video_writer.hpp:705
std::shared_ptr< encoder::IEncoder > Encoder() const
Get the used encoder.
Definition peak_ipl_video_writer.hpp:588
void SetQueueSize(int32_t queueSize)
Set the internal queue size of the video writer.
Definition peak_ipl_video_writer.hpp:652
std::shared_ptr< container::IContainer > Container() const
Get the used container.
Definition peak_ipl_video_writer.hpp:597
void WaitUntilQueueEmpty(int32_t timeout_ms)
Wait until the queue is empty.
Definition peak_ipl_video_writer.hpp:716
VideoWriter & operator=(VideoWriter &&other) noexcept
Definition peak_ipl_video_writer.hpp:462
int32_t NumBuffersQueued()
Get the count of the currently queued buffers, which are waiting to be processed.
Definition peak_ipl_video_writer.hpp:691
void ResetFrameCounters()
Reset compressed and dropped frame counters.
Definition peak_ipl_video_writer.hpp:641
void Append(const Image &image)
Append an image to the opened video.
Definition peak_ipl_video_writer.hpp:565
bool IsOpen() const
Check if the VideoWriter is already open.
Definition peak_ipl_video_writer.hpp:530
uint64_t NumFramesDropped() const
Get the dropped frames in the video stream.
Definition peak_ipl_video_writer.hpp:618
void Close()
Close the opened VideoWriter.
Definition peak_ipl_video_writer.hpp:545
VideoWriter & operator=(const VideoWriter &)=delete
uint64_t FileSize() const
Get the file size of the video in bytes.
Definition peak_ipl_video_writer.hpp:630
uint64_t NumFramesEncoded() const
Get the encoded frames in the video stream.
Definition peak_ipl_video_writer.hpp:606
~VideoWriter()
Definition peak_ipl_video_writer.hpp:446
int32_t QueueSize()
Get the internal queue size of the video writer.
Definition peak_ipl_video_writer.hpp:663
VideoWriter & operator<<(const Image &image)
Append an image to the opened video.
Definition peak_ipl_video_writer.hpp:578
AVI container specialization of IContainer. Create the container with the according Create function.
Definition peak_ipl_video_writer.hpp:343
friend std::unique_ptr< IContainer > Create(PEAK_IPL_VIDEO_CONTAINER container)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:239
AVIContainer(const AVIContainer &)=delete
PEAK_IPL_VIDEO_CONTAINER Id() override
Get the current type of the container.
Definition peak_ipl_video_writer.hpp:358
void SetFramerate(double fps)
Set the frame rate for the opened video.
Definition peak_ipl_video_writer.hpp:372
AVIContainer & operator=(AVIContainer &&)=default
double GetFramerate()
Get the frame rate for the opened video.
Definition peak_ipl_video_writer.hpp:384
AVIContainer & operator=(const AVIContainer &)=delete
AVIContainer(AVIContainer &&)=default
PEAK_IPL_VIDEO_HANDLE m_handle
Definition peak_ipl_video_writer.hpp:265
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:306
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:327
virtual PEAK_IPL_VIDEO_CONTAINER Id()=0
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:287
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition peak_ipl_video_writer.hpp:266
virtual ~IEncoder()=default
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition peak_ipl_video_writer.hpp:45
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:103
PEAK_IPL_VIDEO_HANDLE m_handle
Definition peak_ipl_video_writer.hpp:43
virtual PEAK_IPL_VIDEO_ENCODER Id()=0
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:84
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:66
friend std::unique_ptr< IEncoder > Create(PEAK_IPL_VIDEO_ENCODER encoder)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:239
MJPEGEncoder & operator=(const MJPEGEncoder &)=delete
void SetQuality(uint32_t quality)
Sets the quality for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:149
MJPEGEncoder(MJPEGEncoder &&)=default
MJPEGEncoder(const MJPEGEncoder &)=delete
PEAK_IPL_VIDEO_ENCODER Id() override
Get the current type of the encoder.
Definition peak_ipl_video_writer.hpp:135
Range< double > QualityRange()
Gets the quality range for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:175
MJPEGEncoder & operator=(MJPEGEncoder &&)=default
uint32_t GetQuality()
Gets the quality for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:161
static std::unique_ptr< IContainer > Create(PEAK_IPL_VIDEO_CONTAINER container)
Factory to create a container.
Definition peak_ipl_video_writer.hpp:423
static std::vector< PixelFormatName > GetSupportedPixelFormats(PEAK_IPL_VIDEO_ENCODER encoder)
Get the supported pixel formats for an encoder.
Definition peak_ipl_video_writer.hpp:215
static std::vector< PEAK_IPL_VIDEO_ENCODER > GetSupportedEncodersForAContainer(PEAK_IPL_VIDEO_CONTAINER container)
Get the supported encoders.
Definition peak_ipl_video_writer.hpp:192
static std::unique_ptr< IEncoder > Create(PEAK_IPL_VIDEO_ENCODER encoder)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:239
static std::vector< PEAK_IPL_VIDEO_CONTAINER > GetSupportedContainersForAnEncoder(PEAK_IPL_VIDEO_ENCODER encoder)
Get the supported containers.
Definition peak_ipl_video_writer.hpp:397
Definition peak_ipl_video_writer.hpp:254
Definition peak_ipl_video_writer.hpp:32
The "peak::ipl" namespace contains the whole image processing library.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:289
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:25
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.
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.
uint16_t PEAK_IPL_VIDEO_ENCODER
Definition peak_ipl_backend.h:243
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.
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.
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.
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_VIDEO_CONTAINER_AVI
Definition peak_ipl_backend.h:234
uint16_t PEAK_IPL_VIDEO_CONTAINER_OPTION
Definition peak_ipl_backend.h:255
uint16_t PEAK_IPL_VIDEO_CONTAINER
Definition peak_ipl_backend.h:236
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_VIDEO_ENCODER_OPTION_QUALITY
Definition peak_ipl_backend.h:247
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_Close(PEAK_IPL_VIDEO_HANDLE videoHandle)
Close the video stream.
uint16_t PEAK_IPL_VIDEO_ENCODER_OPTION
Definition peak_ipl_backend.h:249
@ PEAK_IPL_VIDEO_CONTAINER_OPTION_FRAMERATE
Definition peak_ipl_backend.h:253
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_WaitUntilFrameDone(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t timeout_ms)
Wait until frame processing is done.
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.
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:417
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.
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_WaitUntilQueueEmpty(PEAK_IPL_VIDEO_HANDLE videoHandle, int32_t timeout_ms)
Wait until the queue is empty.
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.
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_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.
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.
int8_t PEAK_IPL_BOOL8
Definition peak_ipl_backend.h:26
PEAK_IPL_C_API PEAK_IPL_VideoWriter_Video_ResetFrameCounters(PEAK_IPL_VIDEO_HANDLE videoHandle)
Reset compressed and dropped frame counters.
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.
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.
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:173
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_Video_IsOpen(PEAK_IPL_VIDEO_HANDLE videoHandle, PEAK_IPL_BOOL8 *isOpen)
Check if the video stream is open.
@ PEAK_IPL_VIDEO_ENCODER_MJPEG
Definition peak_ipl_backend.h:241
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.
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:16