.. _api_video_service: Video Service ============= The Video Service allows managing the local participant's video stream as well as attaching a Video Sink to remote video streams. Video interface --------------- #include .. doxygenclass:: dolbyio::comms::services::video Local video ----------- .. doxygenclass:: dolbyio::comms::services::local_video Remote video ------------ The remote video API allows attaching a :cpp:class:`Video Sink ` to receive :cpp:class:`Raw Video Frames `. These video frames can then be handled as the application desires. For example, for rendering on screen or dumping to a file. .. doxygenclass:: dolbyio::comms::services::remote_video .. _vid_frame_handle: Video Forwarding Startegy _________________________ Using the :cpp:enum:`Video Forwarding Strategy ` option when :cpp:func:`joining a conference ` applications can set how many video streams they want forwarded to them. They can then :cpp:func:`subscribe ` to the :cpp:class:`vfs event ` which can be used to know which participants streams are being forwarded to them at a given time and thus which streams to render. .. doxygenstruct:: dolbyio::comms::utils::vfs_event Video frame handling --------------------- #include The application can use the :cpp:class:`video frame handling ` capabilities of the SDK to process captured :cpp:class:`VideoFrames `. The frame handler is an interface providing a :cpp:class:`Video Sink ` and a :cpp:class:`Video Source `, thus inserting the frame handler into the video capture pipeline allows the application to receive, process, and then inject :cpp:class:`VideoFrames ` into the SDK. If you want to only provide frames to the SDK, the application only needs to implement the :cpp:class:`Video Source ` portion of the handler. The :ref:`cv_p_example` section shows a very basic idea for implementing a Video Processor to receive camera frames, alter them and inject them back into the SDK. Note that this is just an example to give an idea of how to create such a module. After creating a custom video processor module like the example, one must call :cpp:func:`start video ` and provide the processor to this function call. At this point the processor will be part of the Video Capture pipeline and all camera frames will pass through it. .. doxygenclass:: dolbyio::comms::video_frame_handler .. doxygenclass:: dolbyio::comms::video_sink .. doxygenclass:: dolbyio::comms::video_source Video frame API --------------- #include Video frame interface _____________________ .. doxygenclass:: dolbyio::comms::video_frame Video frame buffer interface ____________________________ .. doxygenclass:: dolbyio::comms::video_frame_buffer YUV420 video frame buffer _________________________ #include .. doxygenclass:: dolbyio::comms::video_frame_buffer_i420_interface .. doxygenclass:: dolbyio::comms::video_frame_buffer_i420 NV12 video frame buffer _______________________ #include .. doxygenclass:: dolbyio::comms::video_frame_buffer_nv12_interface .. doxygenclass:: dolbyio::comms::video_frame_buffer_nv12 Native video frame buffer _________________________ .. doxygenclass:: dolbyio::comms::video_frame_buffer_native_interface ARGB video frame buffer _______________________ #include .. doxygenclass:: dolbyio::comms::video_frame_buffer_argb_interface .. doxygenclass:: dolbyio::comms::video_frame_buffer_argb Video utilities _______________ #include .. doxygenclass:: dolbyio::comms::video_utils::format_converter