#include <mediastrm.h>
Inheritance diagram for OpalMediaStream:
Public Member Functions | |
Overrides from PObject | |
void | PrintOn (ostream &strm) const |
Operations | |
virtual OpalMediaFormat | GetMediaFormat () const |
virtual bool | UpdateMediaFormat (const OpalMediaFormat &mediaFormat, bool fromPatch=false) |
virtual PBoolean | ExecuteCommand (const OpalMediaCommand &command) |
virtual void | SetCommandNotifier (const PNotifier ¬ifier) |
virtual PBoolean | Open () |
virtual PBoolean | Start () |
virtual PBoolean | Close () |
virtual void | OnPatchStart () |
virtual void | OnPatchStop () |
virtual PBoolean | WritePackets (RTP_DataFrameList &packets) |
virtual PBoolean | ReadPacket (RTP_DataFrame &packet) |
virtual PBoolean | WritePacket (RTP_DataFrame &packet) |
virtual PBoolean | ReadData (BYTE *data, PINDEX size, PINDEX &length) |
virtual PBoolean | WriteData (const BYTE *data, PINDEX length, PINDEX &written) |
bool | PushPacket (RTP_DataFrame &packet) |
virtual PBoolean | SetDataSize (PINDEX dataSize) |
PINDEX | GetDataSize () const |
virtual PBoolean | IsSynchronous () const=0 |
virtual PBoolean | RequiresPatchThread (OpalMediaStream *sinkStream) const |
virtual PBoolean | RequiresPatchThread () const |
virtual void | EnableJitterBuffer () const |
Member variable access | |
OpalConnection & | GetConnection () const |
bool | IsSource () const |
bool | IsSink () const |
unsigned | GetSessionID () const |
PString | GetID () const |
unsigned | GetTimestamp () const |
void | SetTimestamp (unsigned ts) |
bool | GetMarker () const |
void | SetMarker (bool m) |
bool | IsPaused () const |
virtual void | SetPaused (bool pause) |
bool | IsOpen () |
virtual PBoolean | SetPatch (OpalMediaPatch *patch) |
virtual void | RemovePatch (OpalMediaPatch *patch) |
OpalMediaPatch * | GetPatch () const |
void | AddFilter (const PNotifier &Filter, const OpalMediaFormat &Stage=OpalMediaFormat()) |
bool | RemoveFilter (const PNotifier &Filter, const OpalMediaFormat &Stage) |
Protected Attributes | |
OpalConnection & | connection |
unsigned | sessionID |
PString | identifier |
OpalMediaFormat | mediaFormat |
bool | paused |
bool | isSource |
bool | isOpen |
PINDEX | defaultDataSize |
unsigned | timestamp |
bool | marker |
unsigned | mismatchedPayloadTypes |
OpalMediaPatch * | mediaPatch |
PNotifier | commandNotifier |
OpalMediaStream::OpalMediaStream | ( | OpalConnection & | conn, | |
const OpalMediaFormat & | mediaFormat, | |||
unsigned | sessionID, | |||
bool | isSource | |||
) | [protected] |
Construct a new media stream.
mediaFormat | Media format for stream |
sessionID | Session number for stream |
isSource | Is a source stream |
OpalMediaStream::~OpalMediaStream | ( | ) |
Destroy the media stream. Make sure the patch, if present, has been stopped and deleted.
OpalMediaStream::OpalMediaStream | ( | OpalConnection & | conn, | |
const OpalMediaFormat & | mediaFormat, | |||
unsigned | sessionID, | |||
bool | isSource | |||
) | [protected] |
Construct a new media stream.
mediaFormat | Media format for stream |
sessionID | Session number for stream |
isSource | Is a source stream |
OpalMediaStream::~OpalMediaStream | ( | ) |
Destroy the media stream. Make sure the patch, if present, has been stopped and deleted.
void OpalMediaStream::PrintOn | ( | ostream & | strm | ) | const |
Standard stream print function. The PObject class has a << operator defined that calls this function polymorphically.
strm | Stream to output text representation |
virtual OpalMediaFormat OpalMediaStream::GetMediaFormat | ( | ) | const [virtual] |
Get the currently selected media format. The media data format is a string representation of the format being transferred by the media channel. It is typically a value as provided by the RTP_PayloadType class.
The default behaviour simply returns the member variable "mediaFormat".
virtual bool OpalMediaStream::UpdateMediaFormat | ( | const OpalMediaFormat & | mediaFormat, | |
bool | fromPatch = false | |||
) | [virtual] |
Update the media format. This can be used to adjust the parameters of a codec at run time. Note you cannot change the basic media format, eg change GSM0610 to G.711, only options for that format, eg 6k3 mode to 5k3 mode in G.723.1. If the formats are different then a OpalMediaFormat::Merge() is performed.
The default behaviour updates the mediaFormat member variable and pases the value on to the OpalMediaPatch.
mediaFormat | New media format |
fromPatch | Is being called from OpalMediaPatch |
virtual PBoolean OpalMediaStream::ExecuteCommand | ( | const OpalMediaCommand & | command | ) | [virtual] |
Execute the command specified to the transcoder. The commands are highly context sensitive, for example VideoFastUpdate would only apply to a video transcoder.
The default behaviour passes the command on to the OpalMediaPatch.
command | Command to execute. |
virtual void OpalMediaStream::SetCommandNotifier | ( | const PNotifier & | notifier | ) | [virtual] |
Set a notifier to receive commands generated by the transcoder. The commands are highly context sensitive, for example VideoFastUpdate would only apply to a video transcoder.
The default behaviour passes the command on to the OpalMediaPatch and sets the member variable commandNotifier.
notifier | Command to execute. |
virtual PBoolean OpalMediaStream::Open | ( | ) | [virtual] |
Open the media stream using the media format.
The default behaviour simply sets the isOpen variable to true.
Reimplemented in OpalIAX2MediaStream, OpalLineMediaStream, and OpalRTPMediaStream.
virtual PBoolean OpalMediaStream::Start | ( | ) | [virtual] |
Start the media stream.
The default behaviour calls Resume() on the associated OpalMediaPatch thread if it was suspended.
Reimplemented in OpalIAX2MediaStream.
virtual PBoolean OpalMediaStream::Close | ( | ) | [virtual] |
Close the media stream.
The default does nothing.
Reimplemented in OpalIAX2MediaStream, OpalLineMediaStream, OpalRTPMediaStream, OpalRawMediaStream, and OpalUDPMediaStream.
virtual void OpalMediaStream::OnPatchStart | ( | ) | [virtual] |
Callback that is called on the source stream once the media patch has started. The default behaviour calls OpalConnection::OnMediaPatchStart()
virtual void OpalMediaStream::OnPatchStop | ( | ) | [virtual] |
Callback that is called on the source stream once the media patch has started. The default behaviour calls OpalConnection::OnMediaPatchStop()
virtual PBoolean OpalMediaStream::WritePackets | ( | RTP_DataFrameList & | packets | ) | [virtual] |
Write a list of RTP frames of data to the sink media stream. The default behaviour simply calls WritePacket() on each of the elements in the list.
virtual PBoolean OpalMediaStream::ReadPacket | ( | RTP_DataFrame & | packet | ) | [virtual] |
Read an RTP frame of data from the source media stream. The default behaviour simply calls ReadData() on the data portion of the RTP_DataFrame and sets the frames timestamp and marker from the internal member variables of the media stream class.
Reimplemented in OpalIAX2MediaStream, OpalLineMediaStream, OpalLocalMediaStream, OpalRTPMediaStream, and OpalUDPMediaStream.
virtual PBoolean OpalMediaStream::WritePacket | ( | RTP_DataFrame & | packet | ) | [virtual] |
Write an RTP frame of data to the sink media stream. The default behaviour simply calls WriteData() on the data portion of the RTP_DataFrame and and sets the internal timestamp and marker from the member variables of the media stream class.
Reimplemented in OpalLineMediaStream, OpalLocalMediaStream, OpalRTPMediaStream, and OpalUDPMediaStream.
virtual PBoolean OpalMediaStream::ReadData | ( | BYTE * | data, | |
PINDEX | size, | |||
PINDEX & | length | |||
) | [virtual] |
Read raw media data from the source media stream. The default behaviour simply calls ReadPacket() on the data portion of the RTP_DataFrame and sets the frames timestamp and marker from the internal member variables of the media stream class.
data | Data buffer to read to |
size | Size of buffer |
length | Length of data actually read |
Reimplemented in OpalLineMediaStream, OpalLocalMediaStream, OpalNullMediaStream, OpalRawMediaStream, and OpalFileMediaStream.
virtual PBoolean OpalMediaStream::WriteData | ( | const BYTE * | data, | |
PINDEX | length, | |||
PINDEX & | written | |||
) | [virtual] |
Write raw media data to the sink media stream. The default behaviour calls WritePacket() on the data portion of the RTP_DataFrame and and sets the internal timestamp and marker from the member variables of the media stream class.
data | Data to write |
length | Length of data to read. |
written | Length of data actually written |
Reimplemented in OpalIAX2MediaStream, OpalLineMediaStream, OpalLocalMediaStream, OpalNullMediaStream, OpalRawMediaStream, and OpalFileMediaStream.
bool OpalMediaStream::PushPacket | ( | RTP_DataFrame & | packet | ) |
Pushes a frame to the patch
virtual PBoolean OpalMediaStream::SetDataSize | ( | PINDEX | dataSize | ) | [virtual] |
Set the data size in bytes that is expected to be used. Some media streams can make use of this information to perform optimisations.
The default behaviour does nothing.
dataSize | New data size |
Reimplemented in OpalLineMediaStream, OpalRTPMediaStream, and OpalAudioMediaStream.
PINDEX OpalMediaStream::GetDataSize | ( | ) | const [inline] |
Get the data size in bytes that is expected to be used. Some media streams can make use of this information to perform optimisations.
virtual PBoolean OpalMediaStream::IsSynchronous | ( | ) | const [pure virtual] |
Indicate if the media stream is synchronous. If this returns true then the media stream will block of the amount of time it takes to annunciate the data. For example if the media stream is over a sound card, and 480 bytes of data are to be written it will take 30 milliseconds to complete.
Implemented in OpalIAX2MediaStream, OpalLineMediaStream, OpalLocalMediaStream, OpalNullMediaStream, OpalRTPMediaStream, OpalFileMediaStream, OpalAudioMediaStream, and OpalUDPMediaStream.
virtual PBoolean OpalMediaStream::RequiresPatchThread | ( | OpalMediaStream * | sinkStream | ) | const [virtual] |
Indicate if the media stream requires a OpalMediaPatch thread (active patch). This is called on the source stream and is passed the sink stream that the patch will initially be using. The function could conditionally require the patch thread to execute a thread reading and writing data, or prevent it from doing so as it can do so in hardware in some way, e.g. if both streams where on the same OpalLineInterfaceDevice.
The default behaviour simply returns true.
sinkStream | Sink stream for this source |
Reimplemented in OpalLineMediaStream.
virtual PBoolean OpalMediaStream::RequiresPatchThread | ( | ) | const [virtual] |
Reimplemented in OpalNullMediaStream.
virtual void OpalMediaStream::EnableJitterBuffer | ( | ) | const [virtual] |
Enable jitter buffer for the media stream.
The default behaviour does nothing.
Reimplemented in OpalRTPMediaStream.
OpalConnection& OpalMediaStream::GetConnection | ( | ) | const [inline] |
Get the owner connection.
bool OpalMediaStream::IsSource | ( | ) | const [inline] |
Determine of media stream is a source or a sink.
bool OpalMediaStream::IsSink | ( | ) | const [inline] |
Determine of media stream is a source or a sink.
unsigned OpalMediaStream::GetSessionID | ( | ) | const [inline] |
Get the session number of the stream.
PString OpalMediaStream::GetID | ( | ) | const [inline] |
Get the ID associated with this stream. Used for detecting two the streams associated with a bidirectional media channel
unsigned OpalMediaStream::GetTimestamp | ( | ) | const [inline] |
Get the timestamp of last read.
void OpalMediaStream::SetTimestamp | ( | unsigned | ts | ) | [inline] |
Set timestamp for next write.
bool OpalMediaStream::GetMarker | ( | ) | const [inline] |
Get the marker bit of last read.
void OpalMediaStream::SetMarker | ( | bool | m | ) | [inline] |
Set marker bit for next write.
bool OpalMediaStream::IsPaused | ( | ) | const [inline] |
Get the paused state for stream.
virtual void OpalMediaStream::SetPaused | ( | bool | pause | ) | [virtual] |
Set the paused state for stream. This will stop reading/writing data from the stream.
pause | Indicate that the stream should be paused |
bool OpalMediaStream::IsOpen | ( | ) | [inline] |
Returns true if the media stream is open.
virtual PBoolean OpalMediaStream::SetPatch | ( | OpalMediaPatch * | patch | ) | [virtual] |
Set the patch thread that is using this stream.
patch | Media patch thread |
virtual void OpalMediaStream::RemovePatch | ( | OpalMediaPatch * | patch | ) | [virtual] |
Remove the patch thread that is using this stream. This function is useful in case of streams which can be accessed by multiple instances of OpalMediaPatch.
The default behaviour simply sets patchThread to NULL.
OpalMediaPatch* OpalMediaStream::GetPatch | ( | ) | const [inline] |
Get the patch thread that is using the stream.
void OpalMediaStream::AddFilter | ( | const PNotifier & | Filter, | |
const OpalMediaFormat & | Stage = OpalMediaFormat() | |||
) |
Add a filter to the owning patch safely.
bool OpalMediaStream::RemoveFilter | ( | const PNotifier & | Filter, | |
const OpalMediaFormat & | Stage | |||
) |
Remove a filter from the owning patch safely.
OpalConnection& OpalMediaStream::connection [protected] |
Reimplemented in OpalIAX2MediaStream.
unsigned OpalMediaStream::sessionID [protected] |
PString OpalMediaStream::identifier [protected] |
OpalMediaFormat OpalMediaStream::mediaFormat [protected] |
bool OpalMediaStream::paused [protected] |
bool OpalMediaStream::isSource [protected] |
bool OpalMediaStream::isOpen [protected] |
PINDEX OpalMediaStream::defaultDataSize [protected] |
unsigned OpalMediaStream::timestamp [protected] |
bool OpalMediaStream::marker [protected] |
unsigned OpalMediaStream::mismatchedPayloadTypes [protected] |
OpalMediaPatch* OpalMediaStream::mediaPatch [protected] |
PNotifier OpalMediaStream::commandNotifier [protected] |