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#ifndef __cpp_size_t_suffix
15#endif
16#include "libmythtv/mythtvexp.h"
17#include "udppacket.h"
18
32{
33 public:
34 RTPDataPacket(const RTPDataPacket&) = default;
35 explicit RTPDataPacket(const UDPPacket &o) : UDPPacket(o) { }
36 explicit RTPDataPacket(uint64_t key) : UDPPacket(key) { }
37 RTPDataPacket(void) : UDPPacket(0ULL) { }
38
40
41 bool IsValid(void) const override; // UDPPacket
42
43 uint GetVersion(void) const { return (m_data[0] >> 6) & 0x3; }
44 bool HasPadding(void) const { return (m_data[0] >> 5) & 0x1; }
45 bool HasExtension(void) const { return (m_data[0] >> 4) & 0x1; }
46 uint GetCSRCCount(void) const { return m_data[0] & 0xf; }
47
48 enum : uint8_t {
49 kPayLoadTypePCMAudio = 8,
50 kPayLoadTypeMPEGAudio = 12,
51 kPayLoadTypeH261Video = 31,
52 kPayLoadTypeMPEG2Video = 32,
53 kPayLoadTypeTS = 33,
54 kPayLoadTypeH263Video = 34,
55 };
56
57 uint GetPayloadType(void) const
58 {
59 return m_data[1] & 0x7f;
60 }
61
63 {
64 return qFromBigEndian(*reinterpret_cast<const uint16_t*>(m_data.data()+2));
65 }
66
67 uint GetTimeStamp(void) const
68 {
69 return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+4));
70 }
71
73 {
74 return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+8));
75 }
76
78 {
79#ifdef __cpp_size_t_suffix
80 const uint32_t tmp =
81 *reinterpret_cast<const uint32_t*>(m_data.data() + 12 + (4UZ * i));
82#else
83 const uint32_t tmp =
84 *reinterpret_cast<const uint32_t*>(m_data.data() + 12 + (4_UZ * i));
85#endif
86 return qFromBigEndian(tmp);
87 }
88
89 uint GetPayloadOffset(void) const { return m_off; }
90
91 uint GetPaddingSize(void) const
92 {
93 if (!HasPadding())
94 return 0;
95 return m_data[m_data.size()-1];
96 }
97
98 protected:
99 mutable uint m_off { 0 };
100};
101
102#endif // RTP_DATA_PACKET_H
RTP Data Packet.
Definition: rtpdatapacket.h:32
uint GetSynchronizationSource(void) const
Definition: rtpdatapacket.h:72
uint GetCSRCCount(void) const
Definition: rtpdatapacket.h:46
uint GetTimeStamp(void) const
Definition: rtpdatapacket.h:67
uint GetPayloadType(void) const
Definition: rtpdatapacket.h:57
uint GetContributingSource(uint i) const
Definition: rtpdatapacket.h:77
bool HasExtension(void) const
Definition: rtpdatapacket.h:45
RTPDataPacket(const RTPDataPacket &)=default
uint GetSequenceNumber(void) const
Definition: rtpdatapacket.h:62
RTPDataPacket(const UDPPacket &o)
Definition: rtpdatapacket.h:35
uint GetPaddingSize(void) const
Definition: rtpdatapacket.h:91
RTPDataPacket & operator=(const RTPDataPacket &)=default
uint GetPayloadOffset(void) const
Definition: rtpdatapacket.h:89
bool HasPadding(void) const
Definition: rtpdatapacket.h:44
RTPDataPacket(void)
Definition: rtpdatapacket.h:37
RTPDataPacket(uint64_t key)
Definition: rtpdatapacket.h:36
uint GetVersion(void) const
Definition: rtpdatapacket.h:43
UDP Packet.
Definition: udppacket.h:21
virtual bool IsValid(void) const
IsValid() must return true before any data access methods are called, other than GetDataReference() a...
Definition: udppacket.h:32
unsigned int uint
Definition: compat.h:60
unsigned short uint16_t
Definition: iso6937tables.h:3
#define MTV_PUBLIC
Definition: mythtvexp.h:8