arduino-audio-tools
Loading...
Searching...
No Matches
Protected Member Functions | Protected Attributes | List of all members
RTSPFragmentQueue Class Reference

Self-delimited fragment queue shared by packetized RTP video encoders (JPEGRtpEncoder, H264RtpEncoder, ...). More...

#include <RTSPFragmentQueue.h>

Inheritance diagram for RTSPFragmentQueue:
H264RtpEncoder JPEGRtpEncoder

Protected Member Functions

void appendFragment (const uint8_t *payload, size_t len, bool last)
 
void clearQueue ()
 
void dropOldestFrame ()
 
int queuePacketSize ()
 
int queueReadBytes (void *dest, int maxBytes)
 
uint32_t readQueueU32 (size_t pos)
 

Protected Attributes

size_t m_maxQueuedFrames = 1
 
Vector< uint8_t > m_queue
 
size_t m_queuedFrames = 0
 
size_t m_queueHead = 0
 

Detailed Description

Self-delimited fragment queue shared by packetized RTP video encoders (JPEGRtpEncoder, H264RtpEncoder, ...).

Fragments are appended one at a time via appendFragment(), already fully built (payload-format header + data). They are consumed through queuePacketSize()/queueReadBytes(), which subclasses expose as the IMediaSource packetSize()/readBytes() overrides RTSPMediaStreamer expects

The queue is a flat byte buffer of messages laid out as [uint32 payloadLen][uint8 isLast][payloadLen bytes]. The isLast byte is only used internally, to know when a whole frame has been enqueued (see m_queuedFrames / dropOldestFrame) so a slow consumer can be capped to a bounded backlog; it is not exposed through packetSize().

Framing the queue this way (rather than a Vector of per-fragment Vectors) avoids relying on element-wise move/copy semantics that this codebase's Vector<T> does not provide for non-trivial T (it grows via memmove).

Author
Phil Schatzmann

Member Function Documentation

◆ appendFragment()

void appendFragment ( const uint8_t *  payload,
size_t  len,
bool  last 
)
inlineprotected

◆ clearQueue()

void clearQueue ( )
inlineprotected

◆ dropOldestFrame()

void dropOldestFrame ( )
inlineprotected

◆ queuePacketSize()

int queuePacketSize ( )
inlineprotected

◆ queueReadBytes()

int queueReadBytes ( void *  dest,
int  maxBytes 
)
inlineprotected

Retrieves the next queued fragment. Call queuePacketSize() first and pass its result as maxBytes so exactly one fragment is read.

◆ readQueueU32()

uint32_t readQueueU32 ( size_t  pos)
inlineprotected

Member Data Documentation

◆ m_maxQueuedFrames

size_t m_maxQueuedFrames = 1
protected

◆ m_queue

Vector<uint8_t> m_queue
protected

◆ m_queuedFrames

size_t m_queuedFrames = 0
protected

◆ m_queueHead

size_t m_queueHead = 0
protected

The documentation for this class was generated from the following file: