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
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
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
RTP Data Packet.
Definition: rtpdatapacket.h:33
uint GetSynchronizationSource(void) const
Definition: rtpdatapacket.h:73
uint GetCSRCCount(void) const
Definition: rtpdatapacket.h:47
uint GetTimeStamp(void) const
Definition: rtpdatapacket.h:68
uint GetPayloadType(void) const
Definition: rtpdatapacket.h:58
uint GetContributingSource(uint i) const
Definition: rtpdatapacket.h:78
bool HasExtension(void) const
Definition: rtpdatapacket.h:46
RTPDataPacket(const RTPDataPacket &)=default
uint GetSequenceNumber(void) const
Definition: rtpdatapacket.h:63
RTPDataPacket(const UDPPacket &o)
Definition: rtpdatapacket.h:36
uint GetPaddingSize(void) const
Definition: rtpdatapacket.h:87
RTPDataPacket & operator=(const RTPDataPacket &)=default
uint GetPayloadOffset(void) const
Definition: rtpdatapacket.h:85
bool HasPadding(void) const
Definition: rtpdatapacket.h:45
RTPDataPacket(void)
Definition: rtpdatapacket.h:38
RTPDataPacket(uint64_t key)
Definition: rtpdatapacket.h:37
uint GetVersion(void) const
Definition: rtpdatapacket.h:44
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: freesurround.h:24
static guint32 * tmp
Definition: goom_core.cpp:26
unsigned short uint16_t
Definition: iso6937tables.h:3
#define MTV_PUBLIC
Definition: mythtvexp.h:15