# OpalVideoMixer Class Reference

`#include <opalmixer.h>`

Inheritance diagram for OpalVideoMixer:

[legend]
Collaboration diagram for OpalVideoMixer:
[legend]

## Public Types

| eSideBySideLetterbox
| eSideBySideScaled
| eStackedPillarbox
| eStackedScaled
| eGrid
enum | Styles { eSideBySideLetterbox, eSideBySideScaled, eStackedPillarbox, eStackedScaled, eGrid }

## Public Member Functions

| OpalVideoMixer (Styles style, unsigned width, unsigned height, unsigned rate=15, bool pushThread=true)
| ~OpalVideoMixer ()
unsigned | GetFrameWidth () const
unsigned | GetFrameHeight () const
unsigned | GetFrameRate () const
bool | SetFrameRate (unsigned rate)
bool | SetFrameSize (unsigned width, unsigned height)

## Protected Member Functions

virtual Stream * | CreateStream ()
virtual bool | MixStreams (RTP_DataFrame &frame)
virtual size_t | GetOutputSize () const

## Protected Attributes

Styles | m_style
unsigned | m_width
unsigned | m_height
BYTE | m_bgFillRed
BYTE | m_bgFillGreen
BYTE | m_bgFillBlue
PBYTEArray | m_frameStore
size_t | m_lastStreamCount

## Friends

struct | VideoStream

## Data Structures

struct | VideoStream

## Detailed Description

Video mixer. This takes raw YUV420P frames with a PluginCodec_Video_FrameHeader in the RTP data frames, scales them and places them in particular positions of the output data frame. A number of different patterns for positioning the sub images are available in the Styles enum.

## Member Enumeration Documentation

enum OpalVideoMixer::Styles

Enumerator:

  eSideBySideLetterbox | Two images side by side with black bars top and bottom. It is expected that the input frames and output are all the same aspect ratio, e.g. 4:3. Works well if inputs are QCIF and output is CIF for example.
  eSideBySideScaled | Two images side by side, scaled to fit halves of output frame. It is expected that the output frame be double the width of the input data to maintain aspect ratio. e.g. for CIF inputs, output would be 704x288.
  eStackedPillarbox | Two images, one on top of the other with black bars down the sides. It is expected that the input frames and output are all the same aspect ratio, e.g. 4:3. Works well if inputs are QCIF and output is CIF for example.
  eStackedScaled | Two images, one on top of the other, scaled to fit halves of output frame. It is expected that the output frame be double the height of the input data to maintain aspect ratio. e.g. for CIF inputs, output would be 352x576.
  eGrid | Standard 2x2, 3x3, 4x4 grid pattern. Size of grid is dependent on the number of video streams.

## Constructor & Destructor Documentation

OpalVideoMixer::OpalVideoMixer | ( | Styles | style,
|  | unsigned | width,
|  | unsigned | height,
|  | unsigned | rate = `15`,
|  | bool | pushThread = `true` |
| ) |  |  |

Parameters:

  style | Style for mixing video
  width | Width of output frame
  height | Height of output frame
  rate | Frames per second for output
  pushThread | A push thread is to be created

OpalVideoMixer::~OpalVideoMixer | ( |  | ) | `[inline]`

## Member Function Documentation

virtual Stream* OpalVideoMixer::CreateStream | ( |  | ) | `[protected, virtual]`

Implements OpalBaseMixer.

unsigned OpalVideoMixer::GetFrameHeight | ( |  | ) | const`[inline]`

Get output video frame height.

unsigned OpalVideoMixer::GetFrameRate | ( |  | ) | const`[inline]`

Get output video frame rate (frames per second)

unsigned OpalVideoMixer::GetFrameWidth | ( |  | ) | const`[inline]`

Get output video frame width.

virtual size_t OpalVideoMixer::GetOutputSize | ( |  | ) | const`[protected, virtual]`

Implements OpalBaseMixer.

virtual bool OpalVideoMixer::MixStreams | ( | RTP_DataFrame & | frame | ) | `[protected, virtual]`

Implements OpalBaseMixer.

bool OpalVideoMixer::SetFrameRate | ( | unsigned | rate | ) |

Set output video frame rate. May be dynamically changed at any time.

bool OpalVideoMixer::SetFrameSize | ( | unsigned | width,
|  | unsigned | height |
| ) |  |  |

Set the output video frame width and height. May be dynamically changed at any time.

Parameters:

  width | New width
  height | new height

## Friends And Related Function Documentation

friend struct VideoStream `[friend]`

## Field Documentation

BYTE OpalVideoMixer::m_bgFillBlue `[protected]`

BYTE OpalVideoMixer::m_bgFillGreen `[protected]`

BYTE OpalVideoMixer::m_bgFillRed `[protected]`

PBYTEArray OpalVideoMixer::m_frameStore `[protected]`

unsigned OpalVideoMixer::m_height `[protected]`

size_t OpalVideoMixer::m_lastStreamCount `[protected]`

Styles OpalVideoMixer::m_style `[protected]`

unsigned OpalVideoMixer::m_width `[protected]`

The documentation for this class was generated from the following file:

- opalmixer.h