MythTV  master
rtpdatapacket.h
Go to the documentation of this file.
1 /* -*- Mode: c++ -*-
2  * Copyright (c) 2012 Digital Nirvana, Inc.
3  * Distributed as part of MythTV under GPL v2 and later.
4  */
5 
6 #ifndef RTP_DATA_PACKET_H
7 #define RTP_DATA_PACKET_H
8 
9 #include <limits> // workaround QTBUG-90395
10 
11 #include <QtEndian>
12 
13 #include "libmythtv/mythtvexp.h"
14 #include "udppacket.h"
15 
16 #ifdef _MSC_VER
17 # include <WinSock2.h>
18 #endif
19 
33 {
34  public:
35  RTPDataPacket(const RTPDataPacket&) = default;
36  explicit RTPDataPacket(const UDPPacket &o) : UDPPacket(o), m_off(0) { }
37  explicit RTPDataPacket(uint64_t key) : UDPPacket(key), m_off(0) { }
38  RTPDataPacket(void) : UDPPacket(0ULL) { }
39 
40  RTPDataPacket& operator=(const RTPDataPacket&) = default;
41 
42  bool IsValid(void) const override; // UDPPacket
43 
44  uint GetVersion(void) const { return (m_data[0] >> 6) & 0x3; }
45  bool HasPadding(void) const { return (m_data[0] >> 5) & 0x1; }
46  bool HasExtension(void) const { return (m_data[0] >> 4) & 0x1; }
47  uint GetCSRCCount(void) const { return m_data[0] & 0xf; }
48 
49  enum {
50  kPayLoadTypePCMAudio = 8,
51  kPayLoadTypeMPEGAudio = 12,
52  kPayLoadTypeH261Video = 31,
53  kPayLoadTypeMPEG2Video = 32,
54  kPayLoadTypeTS = 33,
55  kPayLoadTypeH263Video = 34,
56  };
57 
58  uint GetPayloadType(void) const
59  {
60  return m_data[1] & 0x7f;
61  }
62 
63  uint GetSequenceNumber(void) const
64  {
65  return qFromBigEndian(*reinterpret_cast<const uint16_t*>(m_data.data()+2));
66  }
67 
68  uint GetTimeStamp(void) const
69  {
70  return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+4));
71  }
72 
74  {
75  return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+8));
76  }
77 
79  {
80  const uint32_t tmp =
81  *reinterpret_cast<const uint32_t*>(m_data.data() + 12 + 4 * i);
82  return qFromBigEndian(tmp);
83  }
84 
85  uint GetPayloadOffset(void) const { return m_off; }
86 
87  uint GetPaddingSize(void) const
88  {
89  if (!HasPadding())
90  return 0;
91  return m_data[m_data.size()-1];
92  }
93 
94  protected:
95  mutable uint m_off { 0 };
96 };
97 
98 #endif // RTP_DATA_PACKET_H
RTPDataPacket::GetTimeStamp
uint GetTimeStamp(void) const
Definition: rtpdatapacket.h:68
UDPPacket::operator=
UDPPacket & operator=(const UDPPacket &)=default
mythtvexp.h
RTPDataPacket::GetVersion
uint GetVersion(void) const
Definition: rtpdatapacket.h:44
tmp
static guint32 * tmp
Definition: goom_core.cpp:26
RTPDataPacket::GetContributingSource
uint GetContributingSource(uint i) const
Definition: rtpdatapacket.h:78
RTPDataPacket::RTPDataPacket
RTPDataPacket(void)
Definition: rtpdatapacket.h:38
RTPDataPacket::GetPayloadOffset
uint GetPayloadOffset(void) const
Definition: rtpdatapacket.h:85
RTPDataPacket::RTPDataPacket
RTPDataPacket(const UDPPacket &o)
Definition: rtpdatapacket.h:36
RTPDataPacket::GetSynchronizationSource
uint GetSynchronizationSource(void) const
Definition: rtpdatapacket.h:73
RTPDataPacket::GetCSRCCount
uint GetCSRCCount(void) const
Definition: rtpdatapacket.h:47
RTPDataPacket::HasPadding
bool HasPadding(void) const
Definition: rtpdatapacket.h:45
RTPDataPacket::GetPaddingSize
uint GetPaddingSize(void) const
Definition: rtpdatapacket.h:87
RTPDataPacket::GetSequenceNumber
uint GetSequenceNumber(void) const
Definition: rtpdatapacket.h:63
MTV_PUBLIC
#define MTV_PUBLIC
Definition: mythtvexp.h:15
udppacket.h
RTPDataPacket::GetPayloadType
uint GetPayloadType(void) const
Definition: rtpdatapacket.h:58
RTPDataPacket::HasExtension
bool HasExtension(void) const
Definition: rtpdatapacket.h:46
RTPDataPacket
RTP Data Packet.
Definition: rtpdatapacket.h:32
uint16_t
unsigned short uint16_t
Definition: iso6937tables.h:3
UDPPacket::IsValid
virtual bool IsValid(void) const
IsValid() must return true before any data access methods are called, other than GetDataReference() a...
Definition: udppacket.h:32
RTPDataPacket::RTPDataPacket
RTPDataPacket(uint64_t key)
Definition: rtpdatapacket.h:37
UDPPacket
UDP Packet.
Definition: udppacket.h:20
uint
unsigned int uint
Definition: freesurround.h:24