OPAL  Version 3.18.8
mediastrm.h
Go to the documentation of this file.
1 /*
2  * mediastrm.h
3  *
4  * Media Stream classes
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (c) 2001 Equivalence Pty. Ltd.
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open Phone Abstraction Library.
22  *
23  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
24  *
25  * Contributor(s): ______________________________________.
26  */
27 
28 #ifndef OPAL_OPAL_MEDIASTRM_H
29 #define OPAL_OPAL_MEDIASTRM_H
30 
31 #ifdef P_USE_PRAGMA
32 #pragma interface
33 #endif
34 
35 #include <opal_config.h>
36 
37 #include <ptclib/delaychan.h>
38 
39 #include <opal/mediafmt.h>
40 #include <opal/mediacmd.h>
41 #include <rtp/jitter.h>
42 #include <ptlib/safecoll.h>
43 #include <ptclib/guid.h>
44 
45 
46 class OpalMediaPatch;
47 class OpalLine;
48 class OpalConnection;
50 
51 
52 typedef PSafePtr<OpalMediaPatch, PSafePtrMultiThreaded> OpalMediaPatchPtr;
53 
54 
110 class OpalMediaStream : public PSafeObject
111 {
112  PCLASSINFO(OpalMediaStream, PSafeObject);
113  protected:
119  OpalConnection & conn,
120  const OpalMediaFormat & mediaFormat,
121  unsigned sessionID,
122  bool isSource
123  );
124 
125  public:
131 
132  public:
139  void PrintOn(
140  ostream & strm
141  ) const;
143 
153  virtual OpalMediaFormat GetMediaFormat() const;
154 
161  virtual bool SetMediaFormat(
162  const OpalMediaFormat & mediaFormat
163  );
164 
174  bool UpdateMediaFormat(
175  const OpalMediaFormat & mediaFormat,
176  bool mergeOnly = false
177  );
178 
187  bool ExecuteCommand(
188  const OpalMediaCommand & command
189  ) const;
190 
195  virtual PBoolean Open();
196 
199  virtual bool IsOpen() const;
200 
203  virtual bool IsEstablished() const;
204 
210  virtual PBoolean Start();
211 
217  virtual PBoolean Close();
218 
222  virtual void OnStartMediaPatch();
223 
227  virtual void OnStopMediaPatch(
228  OpalMediaPatch & patch
229  );
230 
234  virtual bool SetMediaPassThrough(
235  OpalMediaStream & otherStream,
236  bool bypass
237  );
238 
243  virtual PBoolean WritePackets(
244  RTP_DataFrameList & packets
245  );
246 
252  virtual PBoolean ReadPacket(
253  RTP_DataFrame & packet
254  );
255 
261  virtual PBoolean WritePacket(
262  RTP_DataFrame & packet
263  );
264 
270  virtual PBoolean ReadData(
271  BYTE * data,
272  PINDEX size,
273  PINDEX & length
274  );
275 
281  virtual PBoolean WriteData(
282  const BYTE * data,
283  PINDEX length,
284  PINDEX & written
285  );
286 
289  virtual bool PushPacket(
290  RTP_DataFrame & packet
291  );
292 
298  virtual PBoolean SetDataSize(
299  PINDEX dataSize,
300  PINDEX frameTime
301  );
302 
306  PINDEX GetDataSize() const { return m_defaultDataSize; }
307 
314  virtual PBoolean IsSynchronous() const = 0;
315 
325  virtual PBoolean RequiresPatchThread(
326  OpalMediaStream * stream
327  ) const;
328  virtual PBoolean RequiresPatchThread() const; // For backward compatibility
329 
334  virtual bool RequireMediaTransportThread(
335  OpalMediaStream & stream
336  ) const;
337 
344  virtual bool EnableJitterBuffer(bool enab = true);
346 
352 
355  bool IsSource() const { return m_isSource; }
356 
359  bool IsSink() const { return !m_isSource; }
360 
363  unsigned GetSessionID() const { return m_sessionID; }
364 
367  void SetSessionID(unsigned id) { m_sessionID = id; }
368 
372  PString GetID() const { return m_identifier; }
373 
376  unsigned GetTimestamp() const { return m_timestamp; }
377 
380  void SetTimestamp(unsigned ts) { m_timestamp = ts; }
381 
384  bool GetMarker() const { return m_marker; }
385 
388  void SetMarker(bool m) { m_marker = m; }
389 
392  bool IsPaused() const { return m_paused; }
393 
398  bool SetPaused(
399  bool pause
400  ) { return InternalSetPaused(pause, true, false); }
401 
404  virtual PBoolean SetPatch(
405  OpalMediaPatch * patch
406  );
407 
410  OpalMediaPatchPtr GetPatch() const { return m_mediaPatch; }
411 
414  void AddFilter(
415  const PNotifier & filter,
416  const OpalMediaFormat & stage = OpalMediaFormat()
417  ) const;
418 
421  bool RemoveFilter(
422  const PNotifier & filter,
423  const OpalMediaFormat & stage = OpalMediaFormat()
424  ) const;
425 
426 #if OPAL_STATISTICS
427  virtual void GetStatistics(OpalMediaStatistics & statistics, bool fromPatch = false) const;
428 #endif
429 
430  P_DECLARE_BITWISE_ENUM(Details, 6,(
431  DetailMinimum,
432  DetailEOL, // end of line
433  DetailNAT,
434  DetailSecured,
435  DetailFEC,
436  DetailAudio,
437  DetailAddresses
438  ));
439  virtual void PrintDetail(
440  ostream & strm,
441  const char * prefix = NULL,
442  Details details = Details::All()
443  ) const;
445 
446  virtual PString GetPatchThreadName() const;
447  virtual bool InternalUpdateMediaFormat(const OpalMediaFormat & mediaFormat);
448  virtual bool InternalSetPaused(bool pause, bool fromUser, bool fromPatch);
449  virtual bool InternalExecuteCommand(const OpalMediaCommand & command);
450 
451  protected:
452  OpalMediaPatchPtr InternalSetPatchPart1(OpalMediaPatch * newPatch);
453  void InternalSetPatchPart2(const OpalMediaPatchPtr & oldPatch);
454  virtual bool InternalSetJitterBuffer(const OpalJitterBuffer::Init & init);
455 
461  virtual void InternalClose() = 0;
462 
464  unsigned m_sessionID;
467  PString m_identifier;
469  atomic<bool> m_paused;
471  atomic<bool> m_isOpen;
473  unsigned m_timestamp;
474  bool m_marker;
475 
476  OpalMediaPatchPtr m_mediaPatch;
477 
479  unsigned m_frameTime;
480  PINDEX m_frameSize;
481 
482  typedef OpalMediaPatchPtr PatchPtr; // For backward compatibility
483 
484  private:
485  P_REMOVE_VIRTUAL_VOID(OnPatchStart());
486  P_REMOVE_VIRTUAL_VOID(OnPatchStop());
487  P_REMOVE_VIRTUAL_VOID(OnStopMediaPatch());
488  P_REMOVE_VIRTUAL_VOID(RemovePatch(OpalMediaPatch *));
489 
490  friend class OpalMediaPatch;
491 };
492 
493 typedef PSafePtr<OpalMediaStream> OpalMediaStreamPtr;
494 
495 
499 {
500  public:
502  const OpalMediaFormat & mediaFormat
503  );
504 
506  void Pace(
507  bool generated,
508  PINDEX bytes,
509  bool & marker
510  );
511 
512  bool UpdateMediaFormat(
513  const OpalMediaFormat & mediaFormat
514  );
515 
516  protected:
518  unsigned m_frameTime;
519  PINDEX m_frameSize;
520  unsigned m_timeUnits;
521  PAdaptiveDelay m_delay;
522  unsigned m_previousDelay;
523 
524  PTRACE_THROTTLE(m_throttleLog, 4, 5000);
525 };
526 
527 
531 {
533  public:
539  OpalConnection & conn,
540  const OpalMediaFormat & mediaFormat,
541  unsigned sessionID,
542  bool isSource,
543  bool isSynchronous = false
544  );
546  OpalConnection & conn,
547  const OpalMediaFormat & mediaFormat,
548  unsigned sessionID,
549  bool isSource,
550  bool usePacingDelay,
551  bool requiresPatchThread
552  );
554 
560  virtual PBoolean ReadData(
561  BYTE * data,
562  PINDEX size,
563  PINDEX & length
564  );
565 
569  virtual PBoolean WriteData(
570  const BYTE * data,
571  PINDEX length,
572  PINDEX & written
573  );
574 
578  virtual PBoolean RequiresPatchThread() const;
579 
583  virtual PBoolean IsSynchronous() const;
585 
586  protected:
587  virtual void InternalClose() { }
588  virtual bool InternalUpdateMediaFormat(const OpalMediaFormat & newMediaFormat);
589  virtual bool InternalSetPaused(bool pause, bool fromUser, bool fromPatch);
590 
593 };
594 
595 
599 {
600  PCLASSINFO(OpalRawMediaStream, OpalMediaStream);
601  protected:
607  OpalConnection & conn,
608  const OpalMediaFormat & mediaFormat,
609  unsigned sessionID,
610  bool isSource,
611  PChannel * channel,
612  bool autoDelete
613  );
614 
619 
620  public:
626  virtual PBoolean ReadData(
627  BYTE * data,
628  PINDEX size,
629  PINDEX & length
630  );
631 
635  virtual PBoolean WriteData(
636  const BYTE * data,
637  PINDEX length,
638  PINDEX & written
639  );
640 
643  PChannel * GetChannel() { return m_channel; }
644 
647  bool SetChannel(
648  PChannel * channel,
649  bool autoDelete = true
650  );
651 
654  virtual unsigned GetAverageSignalLevel();
656 
657  protected:
658  virtual void InternalClose();
659 
660  PChannel * m_channel;
662  PDECLARE_MUTEX(m_channelMutex);
663 
664  PBYTEArray m_silence;
665 
668  PDECLARE_MUTEX(m_averagingMutex);
669 
670  void CollectAverage(const BYTE * buffer, PINDEX size);
671 };
672 
673 
674 
678 {
680  public:
686  OpalConnection & conn,
687  const OpalMediaFormat & mediaFormat,
688  unsigned sessionID,
689  bool isSource,
690  PFile * file,
691  bool autoDelete = true
692  );
693 
697  OpalConnection & conn,
698  const OpalMediaFormat & mediaFormat,
699  unsigned sessionID,
700  bool isSource,
701  const PFilePath & path
702  );
704 
710  virtual PBoolean IsSynchronous() const;
711 
712  virtual PBoolean ReadData(
713  BYTE * data,
714  PINDEX size,
715  PINDEX & length
716  );
717 
721  virtual PBoolean WriteData(
722  const BYTE * data,
723  PINDEX length,
724  PINDEX & written
725  );
727 
728  protected:
729  PFile file;
730 };
731 
732 
733 #if OPAL_PTLIB_AUDIO
734 
738 class PSoundChannel;
739 
740 class OpalAudioMediaStream : public OpalRawMediaStream
741 {
742  PCLASSINFO(OpalAudioMediaStream, OpalRawMediaStream);
743  public:
748  OpalAudioMediaStream(
749  OpalConnection & conn,
750  const OpalMediaFormat & mediaFormat,
751  unsigned sessionID,
752  bool isSource,
753  PINDEX buffers,
754  unsigned bufferTime,
755  PSoundChannel * channel,
756  bool autoDelete = true
757  );
758 
761  OpalAudioMediaStream(
762  OpalConnection & conn,
763  const OpalMediaFormat & mediaFormat,
764  unsigned sessionID,
765  bool isSource,
766  PINDEX buffers,
767  unsigned bufferTime,
768  const PString & deviceName
769  );
771 
779  virtual PBoolean SetDataSize(
780  PINDEX dataSize,
781  PINDEX frameTime
782  );
783 
787  virtual PBoolean IsSynchronous() const;
789 
790  protected:
791  PINDEX m_soundChannelBuffers;
792  unsigned m_soundChannelBufferTime;
793 };
794 
795 #endif // OPAL_PTLIB_AUDIO
796 
797 #if OPAL_VIDEO
798 
802 class PVideoInputDevice;
803 class PVideoOutputDevice;
804 
806 {
808  public:
814  OpalConnection & conn,
815  const OpalMediaFormat & mediaFormat,
816  unsigned sessionID,
817  PVideoInputDevice * inputDevice,
818  PVideoOutputDevice * outputDevice,
819  bool autoDeleteInput = true,
820  bool autoDeleteOutput = true
821  );
822 
827 
835  virtual PBoolean Open();
836 
842  virtual PBoolean ReadData(
843  BYTE * data,
844  PINDEX size,
845  PINDEX & length
846  );
847 
853  virtual PBoolean WriteData(
854  const BYTE * data,
855  PINDEX length,
856  PINDEX & written
857  );
858 
862  virtual PBoolean IsSynchronous() const;
863 
866  virtual PBoolean SetDataSize(
867  PINDEX dataSize,
868  PINDEX frameTime
869  );
870 
873  virtual void SetVideoInputDevice(
874  PVideoInputDevice * device,
875  bool autoDelete = true
876  );
877 
880  virtual PVideoInputDevice * GetVideoInputDevice() const
881  {
882  return m_inputDevice;
883  }
884 
887  virtual void SetVideoOutputDevice(
888  PVideoOutputDevice * device,
889  bool autoDelete = true
890  );
891 
894  virtual PVideoOutputDevice * GetVideoOutputDevice() const
895  {
896  return m_outputDevice;
897  }
898 
901  virtual void SetVideoWatermarkDevice(
902  PVideoInputDevice * device,
903  bool autoDelete = true
904  );
905 
908  virtual PVideoInputDevice * GetVideoWatermarkDevice() const
909  {
910  return m_watermarkDevice;
911  }
913 
914  protected:
915  virtual void InternalClose();
916  virtual bool InternalUpdateMediaFormat(const OpalMediaFormat & newMediaFormat);
917  virtual bool InternalExecuteCommand(const OpalMediaCommand & command);
918  bool InternalAdjustDevices();
919  virtual void ApplyWatermark(unsigned width, unsigned height, BYTE * frame);
920 
921  PVideoInputDevice * m_inputDevice;
922  PVideoInputDevice * m_watermarkDevice;
923  PVideoOutputDevice * m_outputDevice;
927  PTimeInterval m_lastGrabTime;
929  PDECLARE_MUTEX(m_devicesMutex);
930  PBYTEArray m_watermarkData;
931 };
932 
933 #endif // OPAL_VIDEO
934 
935 class OpalTransportUDP;
936 
940 {
941  PCLASSINFO(OpalUDPMediaStream, OpalMediaStream);
942  public:
948  OpalConnection & conn,
949  const OpalMediaFormat & mediaFormat,
950  unsigned sessionID,
951  bool isSource,
952  OpalTransportUDP & transport
953  );
955 
957 
960 
964  virtual PBoolean ReadPacket(
965  RTP_DataFrame & packet
966  );
967 
971  virtual PBoolean WritePacket(
972  RTP_DataFrame & packet
973  );
974 
978  virtual PBoolean IsSynchronous() const;
980 
981  private:
982  virtual void InternalClose();
983 
984  OpalTransportUDP & udpTransport;
985 };
986 
987 
988 #endif //OPAL_OPAL_MEDIASTRM_H
989 
990 
991 // End of File ///////////////////////////////////////////////////////////////
virtual void SetVideoWatermarkDevice(PVideoInputDevice *device, bool autoDelete=true)
OpalMediaPatchPtr InternalSetPatchPart1(OpalMediaPatch *newPatch)
P_DECLARE_BITWISE_ENUM(Details, 6,(DetailMinimum, DetailEOL, DetailNAT, DetailSecured, DetailFEC, DetailAudio, DetailAddresses))
virtual PBoolean IsSynchronous() const =0
OpalMediaPatchPtr GetPatch() const
Definition: mediastrm.h:410
virtual void SetVideoInputDevice(PVideoInputDevice *device, bool autoDelete=true)
PINDEX m_frameSize
Definition: mediastrm.h:519
bool SetChannel(PChannel *channel, bool autoDelete=true)
bool m_autoDeleteWatermark
Definition: mediastrm.h:925
RTP_SyncSourceId m_syncSourceId
Definition: mediastrm.h:466
void SetSessionID(unsigned id)
Definition: mediastrm.h:367
unsigned m_frameTime
Definition: mediastrm.h:479
OpalFileMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource, PFile *file, bool autoDelete=true)
unsigned m_timeUnits
Definition: mediastrm.h:520
virtual void InternalClose()
Definition: mediastrm.h:587
PChannel * GetChannel()
Definition: mediastrm.h:643
Definition: mediacmd.h:43
PVideoInputDevice * m_watermarkDevice
Definition: mediastrm.h:922
virtual PBoolean IsSynchronous() const
virtual PBoolean IsSynchronous() const
PTimeInterval m_lastGrabTime
Definition: mediastrm.h:927
PDECLARE_MUTEX(m_channelMutex)
PString GetID() const
Definition: mediastrm.h:372
unsigned m_timestamp
Definition: mediastrm.h:473
bool RemoveFilter(const PNotifier &filter, const OpalMediaFormat &stage=OpalMediaFormat()) const
virtual bool EnableJitterBuffer(bool enab=true)
PSafePtr< OpalMediaStream > OpalMediaStreamPtr
Definition: mediastrm.h:493
virtual bool IsOpen() const
PINDEX m_frameSize
Definition: mediastrm.h:480
virtual PBoolean WriteData(const BYTE *data, PINDEX length, PINDEX &written)
virtual bool SetMediaFormat(const OpalMediaFormat &mediaFormat)
virtual PBoolean ReadData(BYTE *data, PINDEX size, PINDEX &length)
bool IsSink() const
Definition: mediastrm.h:359
unsigned GetSessionID() const
Definition: mediastrm.h:363
virtual PBoolean WritePacket(RTP_DataFrame &packet)
PTRACE_THROTTLE(m_throttleLog, 4, 5000)
virtual PVideoInputDevice * GetVideoWatermarkDevice() const
Definition: mediastrm.h:908
void SetMarker(bool m)
Definition: mediastrm.h:388
PString m_identifier
Definition: mediastrm.h:467
virtual PVideoInputDevice * GetVideoInputDevice() const
Definition: mediastrm.h:880
atomic< bool > m_isOpen
Definition: mediastrm.h:471
bool m_requiresPatchThread
Definition: mediastrm.h:592
virtual PBoolean ReadPacket(RTP_DataFrame &packet)
PayloadTypes
Definition: rtp.h:556
virtual PBoolean Open()
virtual bool InternalSetPaused(bool pause, bool fromUser, bool fromPatch)
OpalMediaFormat m_mediaFormat
Definition: mediastrm.h:468
OpalUDPMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource, OpalTransportUDP &transport)
void PrintOn(ostream &strm) const
Initialisation information.
Definition: jitter.h:86
virtual PBoolean SetPatch(OpalMediaPatch *patch)
Definition: mediastrm.h:677
virtual PBoolean Open()
Definition: rtp.h:540
virtual OpalMediaFormat GetMediaFormat() const
virtual bool RequireMediaTransportThread(OpalMediaStream &stream) const
virtual PBoolean IsSynchronous() const
virtual unsigned GetAverageSignalLevel()
Definition: patch.h:56
virtual PBoolean WriteData(const BYTE *data, PINDEX length, PINDEX &written)
WORD m_sequenceNumber
Definition: mediastrm.h:465
Definition: mediafmt.h:806
virtual bool InternalExecuteCommand(const OpalMediaCommand &command)
virtual PBoolean Close()
Definition: mediastrm.h:598
bool m_isSource
Definition: mediastrm.h:470
PVideoInputDevice * m_inputDevice
Definition: mediastrm.h:921
PAdaptiveDelay m_delay
Definition: mediastrm.h:521
virtual void InternalClose()
virtual PBoolean IsSynchronous() const
atomic< bool > m_paused
Definition: mediastrm.h:469
virtual void InternalClose()=0
bool m_isSynchronous
Definition: mediastrm.h:591
bool m_needKeyFrame
Definition: mediastrm.h:928
virtual PBoolean ReadData(BYTE *data, PINDEX size, PINDEX &length)
OpalMediaPatchPtr PatchPtr
Definition: mediastrm.h:482
OpalNullMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource, bool isSynchronous=false)
bool m_autoDelete
Definition: mediastrm.h:661
virtual void ApplyWatermark(unsigned width, unsigned height, BYTE *frame)
bool UpdateMediaFormat(const OpalMediaFormat &mediaFormat, bool mergeOnly=false)
bool m_timeOnMarkers
Definition: mediastrm.h:517
Definition: mediastrm.h:498
virtual PBoolean WriteData(const BYTE *data, PINDEX length, PINDEX &written)
bool ExecuteCommand(const OpalMediaCommand &command) const
virtual void SetVideoOutputDevice(PVideoOutputDevice *device, bool autoDelete=true)
PINDEX GetDataSize() const
Definition: mediastrm.h:306
PBYTEArray m_watermarkData
Definition: mediastrm.h:930
virtual PBoolean ReadData(BYTE *data, PINDEX size, PINDEX &length)
virtual bool SetMediaPassThrough(OpalMediaStream &otherStream, bool bypass)
virtual PBoolean SetDataSize(PINDEX dataSize, PINDEX frameTime)
virtual void GetStatistics(OpalMediaStatistics &statistics, bool fromPatch=false) const
Definition: mediastrm.h:939
OpalConnection & m_connection
Definition: mediastrm.h:463
bool m_autoDeleteOutput
Definition: mediastrm.h:926
unsigned m_frameTime
Definition: mediastrm.h:518
virtual void InternalClose()
virtual PBoolean RequiresPatchThread() const
virtual PBoolean WriteData(const BYTE *data, PINDEX length, PINDEX &written)
virtual PBoolean RequiresPatchThread() const
OpalVideoMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, PVideoInputDevice *inputDevice, PVideoOutputDevice *outputDevice, bool autoDeleteInput=true, bool autoDeleteOutput=true)
virtual void OnStopMediaPatch(OpalMediaPatch &patch)
Definition: mediastrm.h:110
Definition: transports.h:1197
virtual void PrintDetail(ostream &strm, const char *prefix=NULL, Details details=Details::All()) const
OpalMediaPatchPtr m_mediaPatch
Definition: mediastrm.h:476
PUInt64 m_averageSignalSum
Definition: mediastrm.h:666
bool m_autoDeleteInput
Definition: mediastrm.h:924
virtual bool InternalUpdateMediaFormat(const OpalMediaFormat &newMediaFormat)
virtual PBoolean SetDataSize(PINDEX dataSize, PINDEX frameTime)
virtual void OnStartMediaPatch()
virtual PString GetPatchThreadName() const
PINDEX m_defaultDataSize
Definition: mediastrm.h:472
void Pace(bool generated, PINDEX bytes, bool &marker)
Delay appropriate time for the written bytes.
virtual bool InternalUpdateMediaFormat(const OpalMediaFormat &mediaFormat)
virtual PBoolean Start()
virtual bool InternalSetPaused(bool pause, bool fromUser, bool fromPatch)
void AddFilter(const PNotifier &filter, const OpalMediaFormat &stage=OpalMediaFormat()) const
Definition: connection.h:415
unsigned m_averageSignalSamples
Definition: mediastrm.h:667
virtual PBoolean ReadData(BYTE *data, PINDEX size, PINDEX &length)
virtual PBoolean WritePacket(RTP_DataFrame &packet)
virtual PVideoOutputDevice * GetVideoOutputDevice() const
Definition: mediastrm.h:894
PBYTEArray m_silence
Definition: mediastrm.h:664
virtual bool InternalSetJitterBuffer(const OpalJitterBuffer::Init &init)
bool m_marker
Definition: mediastrm.h:474
OpalConnection & GetConnection() const
Definition: mediastrm.h:351
virtual PBoolean WriteData(const BYTE *data, PINDEX length, PINDEX &written)
virtual bool InternalUpdateMediaFormat(const OpalMediaFormat &newMediaFormat)
OpalMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
virtual bool PushPacket(RTP_DataFrame &packet)
bool UpdateMediaFormat(const OpalMediaFormat &mediaFormat)
Definition: mediasession.h:210
bool IsPaused() const
Definition: mediastrm.h:392
Definition: lid.h:921
uint32_t RTP_SyncSourceId
Definition: rtp.h:46
void SetTimestamp(unsigned ts)
Definition: mediastrm.h:380
bool GetMarker() const
Definition: mediastrm.h:384
bool SetPaused(bool pause)
Definition: mediastrm.h:398
PVideoOutputDevice * m_outputDevice
Definition: mediastrm.h:923
Definition: mediastrm.h:805
PDECLARE_MUTEX(m_devicesMutex)
PFile file
Definition: mediastrm.h:729
virtual PBoolean ReadPacket(RTP_DataFrame &packet)
void CollectAverage(const BYTE *buffer, PINDEX size)
OpalRawMediaStream(OpalConnection &conn, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource, PChannel *channel, bool autoDelete)
unsigned m_previousDelay
Definition: mediastrm.h:522
unsigned m_sessionID
Definition: mediastrm.h:464
OpalMediaStreamPacing(const OpalMediaFormat &mediaFormat)
RTP_DataFrame::PayloadTypes m_payloadType
Definition: mediastrm.h:478
virtual bool InternalExecuteCommand(const OpalMediaCommand &command)
bool IsSource() const
Definition: mediastrm.h:355
Definition: mediastrm.h:530
PChannel * m_channel
Definition: mediastrm.h:660
void InternalSetPatchPart2(const OpalMediaPatchPtr &oldPatch)
virtual PBoolean ReadData(BYTE *data, PINDEX size, PINDEX &length)
unsigned GetTimestamp() const
Definition: mediastrm.h:376
virtual PBoolean WritePackets(RTP_DataFrameList &packets)
virtual bool IsEstablished() const