IDS peak IPL v1.18.0
Loading...
Searching...
No Matches
peak_ipl_video_writer.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
13
14#include <cstdint>
15#include <memory>
16#include <string>
17#include <utility>
18
19namespace peak
20{
21namespace ipl
22{
23
24class VideoWriter;
25
26namespace encoder
27{
28
34{
36
37protected:
39
41 {
42 this->m_handle = handle;
43 }
44
45public:
46 IEncoder() = default;
47 virtual ~IEncoder() = default;
49
61 void SetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, const void* value, size_t count)
62 {
64 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Encoder_SetOption(m_handle, option, value, count); });
65 }
66
79 void GetOption(PEAK_IPL_VIDEO_ENCODER_OPTION option, void* value, size_t count, size_t* outCount)
80 {
82 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Encoder_GetOption(m_handle, option, value, count, outCount);
83 });
84 }
85
98 void OptionRange(PEAK_IPL_VIDEO_ENCODER_OPTION option, void* min, void* max, void* inc)
99 {
102 });
103 }
104};
105
106static std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder);
107
113class MJPEGEncoder : public IEncoder
114{
115 friend std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder);
116
117 MJPEGEncoder() = default;
118
119public:
120 MJPEGEncoder(const MJPEGEncoder&) = delete;
121 MJPEGEncoder(MJPEGEncoder&&) = default;
122
123 MJPEGEncoder& operator=(const MJPEGEncoder&) = delete;
124 MJPEGEncoder& operator=(MJPEGEncoder&&) = default;
125
131 {
133 }
134
144 void SetQuality(uint32_t quality)
145 {
146 SetOption(PEAK_IPL_VIDEO_ENCODER_OPTION_QUALITY, &quality, sizeof(quality));
147 }
148
156 uint32_t GetQuality()
157 {
158 uint32_t quality = 0;
159 GetOption(PEAK_IPL_VIDEO_ENCODER_OPTION_QUALITY, &quality, sizeof(quality), nullptr);
160 return quality;
161 }
162
171 {
172 double min = 0, max = 0, inc = 0;
174 return { min, max, inc };
175 }
176};
177
187static inline std::vector<PEAK_IPL_VIDEO_ENCODER> GetSupportedEncodersForAContainer(PEAK_IPL_VIDEO_CONTAINER container)
188{
189 size_t length{};
192 });
193 std::vector<PEAK_IPL_VIDEO_ENCODER> encoders(length);
196 container, encoders.data(), &length);
197 });
198 return encoders;
199}
200
210static inline std::vector<PixelFormatName> GetSupportedPixelFormats(PEAK_IPL_VIDEO_ENCODER encoder)
211{
212 size_t sizeOfData{};
215 });
216 std::vector<PixelFormatName> formats(sizeOfData);
219 encoder, reinterpret_cast<PEAK_IPL_PIXEL_FORMAT*>(formats.data()), &sizeOfData);
220 });
221 return formats;
222}
223
234static inline std::unique_ptr<IEncoder> Create(PEAK_IPL_VIDEO_ENCODER encoder)
235{
236 switch (encoder)
237 {
239 return std::unique_ptr<MJPEGEncoder>(new MJPEGEncoder());
240 default:
241 throw InvalidArgumentException("The supplied encoder is not a valid value!");
242 }
243
244}
245
246} // namespace encoder
247
248namespace container
249{
250
256{
258
259protected:
262 {
263 this->m_handle = handle;
264 }
265
266public:
267 IContainer() = default;
268 virtual ~IContainer() = default;
270
282 void SetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, const void* value, size_t count)
283 {
286 });
287 }
288
301 void GetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void* value, size_t count, size_t* outCount)
302 {
305 m_handle, option, value, count, outCount);
306 });
307 }
308
322 void OptionRange(PEAK_IPL_VIDEO_CONTAINER_OPTION option, void* min, void* max, void* inc)
323 {
326 });
327 }
328};
329
330static std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container);
331
337class AVIContainer : public IContainer
338{
339 friend std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container);
340 AVIContainer() = default;
341
342public:
343 AVIContainer(const AVIContainer&) = delete;
344 AVIContainer(AVIContainer&&) = default;
345
346 AVIContainer& operator=(const AVIContainer&) = delete;
347 AVIContainer& operator=(AVIContainer&&) = default;
348
354 {
356 }
357
367 void SetFramerate(double fps)
368 {
370 }
371
380 {
381 double fps = 0;
382 GetOption(PEAK_IPL_VIDEO_CONTAINER_OPTION_FRAMERATE, &fps, sizeof(fps), nullptr);
383 return fps;
384 }
385};
386
392static inline std::vector<PEAK_IPL_VIDEO_CONTAINER> GetSupportedContainersForAnEncoder(PEAK_IPL_VIDEO_ENCODER encoder)
393{
394 size_t length{};
397 });
398 std::vector<PEAK_IPL_VIDEO_CONTAINER> containers(length);
401 encoder, containers.data(), &length);
402 });
403 return containers;
404}
405
418static std::unique_ptr<IContainer> Create(PEAK_IPL_VIDEO_CONTAINER container)
419{
420 switch (container)
421 {
423 return std::unique_ptr<AVIContainer>(new AVIContainer());
424 default:
425 throw InvalidArgumentException("The supplied container is not a valid value!");
426 }
427}
428
429} // namespace container
430
431class Image;
432
437class VideoWriter final
438{
439public:
440 VideoWriter() = default;
442 {
443 if(IsOpen())
444 {
445 Close();
446 }
447 }
448 VideoWriter(const VideoWriter&) = delete;
449 VideoWriter(VideoWriter&& other) noexcept
450 {
451 m_handle = other.m_handle;
452 other.m_handle = nullptr;
453 m_encoder = std::move(other.m_encoder);
454 m_container = std::move(other.m_container);
455 }
458 {
459 m_handle = other.m_handle;
460 other.m_handle = nullptr;
461 m_encoder = std::move(other.m_encoder);
462 m_container = std::move(other.m_container);
463
464 return *this;
465 }
466
480 void Open(const std::string& fileName, std::shared_ptr<container::IContainer> container,
481 std::shared_ptr<encoder::IEncoder> encoder)
482 {
483 if (!container || !encoder)
484 {
485 throw InvalidArgumentException("The given pointer is a null pointer!");
486 }
487
490 &m_handle, fileName.c_str(), container->Id(), encoder->Id());
491 });
492 m_encoder = encoder;
493 m_container = container;
494
495 m_encoder->SetHandle(m_handle);
496 m_container->SetHandle(m_handle);
497 }
498
509 void Open(const std::string& fileName)
510 {
513 Open(fileName, std::move(container), std::move(encoder));
514 }
515
526 {
527 PEAK_IPL_BOOL8 isOpen = 0;
529 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_IsOpen(m_handle, &isOpen); });
530 return isOpen != 0;
531 }
532
540 void Close()
541 {
543
544 m_handle = nullptr;
545 }
546
560 void Append(const Image& image)
561 {
562 if (m_encoder == nullptr)
563 {
564 throw InvalidArgumentException("The open method must be called before append!");
565 }
568 m_handle, ImageBackendAccessor::BackendHandle(image));
569 });
570 }
571
574 {
575 Append(image);
576 return *this;
577 }
578
583 PEAK_IPL_NO_DISCARD std::shared_ptr<encoder::IEncoder> Encoder() const
584 {
585 return m_encoder;
586 }
587
592 PEAK_IPL_NO_DISCARD std::shared_ptr<container::IContainer> Container() const
593 {
594 return m_container;
595 }
596
602 {
603 uint64_t numFramesEncoded{};
605 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_GetEncodedFrames(m_handle, &numFramesEncoded); });
606 return numFramesEncoded;
607 }
608
614 {
615 uint64_t numFramesDropped{};
617 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Video_GetDroppedFrames(m_handle, &numFramesDropped); });
618 return numFramesDropped;
619 }
620
626 {
627 uint64_t s{};
630 return s;
631 }
632
642
647 void SetQueueSize(int32_t queueSize)
648 {
651 });
652 }
653
659 {
660 int32_t queueSize{};
663 });
664
665 return queueSize;
666 }
667
673 {
674 int32_t minQueueSize{}, maxQueueSize{};
676 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_VideoWriter_Queue_GetRange(m_handle, &minQueueSize, &maxQueueSize);
677 });
678
679 return {minQueueSize, maxQueueSize, 1};
680 }
681
687 {
688 int32_t queued{};
691 });
692
693 return queued;
694 }
695
700 void WaitUntilFrameDone(int32_t timeout_ms)
701 {
704 });
705 }
706
711 void WaitUntilQueueEmpty(int32_t timeout_ms)
712 {
715 });
716 }
717
718private:
719 PEAK_IPL_VIDEO_HANDLE m_handle{nullptr};
720 std::shared_ptr<encoder::IEncoder> m_encoder{};
721 std::shared_ptr<container::IContainer> m_container{};
722};
723
724} /* namespace ipl */
725} /* namespace peak */
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:42
The exception thrown when passing an invalid parameter to a function.
Definition peak_ipl_exception.hpp:79
Range support and convenience class.
Definition peak_ipl_range.hpp:30
Writes images to a file in the form of a video.
Definition peak_ipl_video_writer.hpp:438
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:480
VideoWriter(const VideoWriter &)=delete
VideoWriter(VideoWriter &&other) noexcept
Definition peak_ipl_video_writer.hpp:449
Range< int32_t > QueueSizeRange()
Get the range of the queue size.
Definition peak_ipl_video_writer.hpp:672
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:509
void WaitUntilFrameDone(int32_t timeout_ms)
Wait until frame processing is done.
Definition peak_ipl_video_writer.hpp:700
std::shared_ptr< encoder::IEncoder > Encoder() const
Get the used encoder.
Definition peak_ipl_video_writer.hpp:583
void SetQueueSize(int32_t queueSize)
Set the internal queue size of the video writer.
Definition peak_ipl_video_writer.hpp:647
std::shared_ptr< container::IContainer > Container() const
Get the used container.
Definition peak_ipl_video_writer.hpp:592
void WaitUntilQueueEmpty(int32_t timeout_ms)
Wait until the queue is empty.
Definition peak_ipl_video_writer.hpp:711
VideoWriter & operator=(VideoWriter &&other) noexcept
Definition peak_ipl_video_writer.hpp:457
int32_t NumBuffersQueued()
Get the count of the currently queued buffers, which are waiting to be processed.
Definition peak_ipl_video_writer.hpp:686
void ResetFrameCounters()
Reset compressed and dropped frame counters.
Definition peak_ipl_video_writer.hpp:636
void Append(const Image &image)
Append an image to the opened video.
Definition peak_ipl_video_writer.hpp:560
bool IsOpen() const
Check if the VideoWriter is already open.
Definition peak_ipl_video_writer.hpp:525
uint64_t NumFramesDropped() const
Get the dropped frames in the video stream.
Definition peak_ipl_video_writer.hpp:613
void Close()
Close the opened VideoWriter.
Definition peak_ipl_video_writer.hpp:540
VideoWriter & operator=(const VideoWriter &)=delete
uint64_t FileSize() const
Get the file size of the video in bytes.
Definition peak_ipl_video_writer.hpp:625
uint64_t NumFramesEncoded() const
Get the encoded frames in the video stream.
Definition peak_ipl_video_writer.hpp:601
~VideoWriter()
Definition peak_ipl_video_writer.hpp:441
int32_t QueueSize()
Get the internal queue size of the video writer.
Definition peak_ipl_video_writer.hpp:658
VideoWriter & operator<<(const Image &image)
Append an image to the opened video.
Definition peak_ipl_video_writer.hpp:573
AVI container specialization of IContainer. Create the container with the according Create function.
Definition peak_ipl_video_writer.hpp:338
friend std::unique_ptr< IContainer > Create(PEAK_IPL_VIDEO_CONTAINER container)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:234
AVIContainer(const AVIContainer &)=delete
PEAK_IPL_VIDEO_CONTAINER Id() override
Get the current type of the container.
Definition peak_ipl_video_writer.hpp:353
void SetFramerate(double fps)
Set the frame rate for the opened video.
Definition peak_ipl_video_writer.hpp:367
AVIContainer & operator=(AVIContainer &&)=default
double GetFramerate()
Get the frame rate for the opened video.
Definition peak_ipl_video_writer.hpp:379
AVIContainer & operator=(const AVIContainer &)=delete
AVIContainer(AVIContainer &&)=default
PEAK_IPL_VIDEO_HANDLE m_handle
Definition peak_ipl_video_writer.hpp:260
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:301
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:322
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:282
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition peak_ipl_video_writer.hpp:261
virtual ~IEncoder()=default
void SetHandle(PEAK_IPL_VIDEO_HANDLE handle)
Definition peak_ipl_video_writer.hpp:40
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:98
PEAK_IPL_VIDEO_HANDLE m_handle
Definition peak_ipl_video_writer.hpp:38
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:79
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:61
friend std::unique_ptr< IEncoder > Create(PEAK_IPL_VIDEO_ENCODER encoder)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:234
MJPEGEncoder & operator=(const MJPEGEncoder &)=delete
void SetQuality(uint32_t quality)
Sets the quality for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:144
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:130
Range< double > QualityRange()
Gets the quality range for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:170
MJPEGEncoder & operator=(MJPEGEncoder &&)=default
uint32_t GetQuality()
Gets the quality for the jpeg encoder.
Definition peak_ipl_video_writer.hpp:156
static std::unique_ptr< IContainer > Create(PEAK_IPL_VIDEO_CONTAINER container)
Factory to create a container.
Definition peak_ipl_video_writer.hpp:418
static std::vector< PixelFormatName > GetSupportedPixelFormats(PEAK_IPL_VIDEO_ENCODER encoder)
Get the supported pixel formats for an encoder.
Definition peak_ipl_video_writer.hpp:210
static std::vector< PEAK_IPL_VIDEO_ENCODER > GetSupportedEncodersForAContainer(PEAK_IPL_VIDEO_CONTAINER container)
Get the supported encoders.
Definition peak_ipl_video_writer.hpp:187
static std::unique_ptr< IEncoder > Create(PEAK_IPL_VIDEO_ENCODER encoder)
Factory to create an encoder.
Definition peak_ipl_video_writer.hpp:234
static std::vector< PEAK_IPL_VIDEO_CONTAINER > GetSupportedContainersForAnEncoder(PEAK_IPL_VIDEO_ENCODER encoder)
Get the supported containers.
Definition peak_ipl_video_writer.hpp:392
Definition peak_ipl_video_writer.hpp:249
Definition peak_ipl_video_writer.hpp:27
The "peak::ipl" namespace contains the whole image processing library.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:284
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:20
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:240
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:231
uint16_t PEAK_IPL_VIDEO_CONTAINER_OPTION
Definition peak_ipl_backend.h:252
uint16_t PEAK_IPL_VIDEO_CONTAINER
Definition peak_ipl_backend.h:233
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:244
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:246
@ PEAK_IPL_VIDEO_CONTAINER_OPTION_FRAMERATE
Definition peak_ipl_backend.h:250
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:414
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:23
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:170
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:238
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:11