windows-nt/Source/XPSP1/NT/net/tapi/skywalker/inc/rtppktd.h
2020-09-26 16:20:57 +08:00

230 lines
10 KiB
C

/****************************************************************************
* @doc INTERNAL RTPPKTD
*
* @module RtpPktD.h | Header file for the RTP packetization descriptor
* structures.
***************************************************************************/
#ifndef _RTPPKTD_H_
#define _RTPPKTD_H_
/*****************************************************************************
* @doc INTERNAL CRTPPKTDSTRUCTENUM
*
* @struct RTP_PD | The <t RTP_PD> structure is used to specify the details
* of the RTP Pd format.
*
* @field DWORD | dwThisHeaderLength | Specifies the length, in bytes, of
* this structure. This field is the offset to the next <t RTP_PD>
* structure, if there is one, or the start of the payload headers.
*
* @field DWORD | dwPayloadHeaderOffset | Specifies the offset from the start
* of the RTP packetization descriptor data to the first byte of the payload
* header.
*
* @field DWORD | dwPayloadHeaderLength | Specifies the length, in bytes, of
* the payload header.
*
* @field DWORD | dwPayloadStartBitOffset | Specifies the offset from the
* start of the corresponding compressed video buffer to the first bit of
* the payload data associated with this <t RTP_PD> structure.
*
* @field DWORD | dwPayloadEndBitOffset | Specifies the offset from the start
* of the corresponding compressed video buffer to the last bit of the
* payload data associated with this <t RTP_PD> structure.
*
* @field DWORD | fEndMarkerBit | If set to TRUE, this flag signals that
* this structure applies to the last chunk of a video frame. Typically,
* only the last packet descriptor in a series of descriptors would have
* this flag turned on. However, this may not be the case for devices
* that do not respect frame boundaries and fill video capture buffers
* with truncated or multiple video frames.
*
* @field DWORD | dwLayerId | Specifies the ID of the encoding layer this
* descriptor applies to. For standard video encoders, this field is
* always set to 0. In the case of multi-layered encoders, this field
* shall be set to 0 for the base layer, 1 for the first enhancement
* layer, 2 for the next enhancement layer, etc.
*
* @field DWORD | dwTimestamp | Specifies the value of the timestamp field
* to be set by the downstream filter when creating the RTP header for
* this packet. The units and ranges for this field shall adhere to the
* definition of timestamp given in section 5.1 of RFC 1889.
*
* @field DWORD | dwAudioAttributes | Specifies some bitfield attributes
* used to characterize the sample in the audio stream associated to this
* RTP packetization descriptor. This field shall always be set to 0,
* unless the audio sample described by this RTP packetization descriptor
* structure is a silent frame, in which case, this field shall be set
* to AUDIO_SILENT (defined as 1).
*
* @field DWORD | dwVideoAttributes | Specifies some bitfield attributes
* used to characterize the sample in the video stream associated to this
* RTP packetization descriptor. There are no video attributes defined at
* this time. Therefore, this field shall always be set to 0.
*
* @field DWORD | dwReserved | Reserved. Shall all be set to 0.
***************************************************************************/
typedef struct tagRTP_PD
{
DWORD dwThisHeaderLength;
DWORD dwPayloadHeaderOffset;
DWORD dwPayloadHeaderLength;
DWORD dwPayloadStartBitOffset;
DWORD dwPayloadEndBitOffset;
BOOL fEndMarkerBit;
DWORD dwLayerId;
DWORD dwTimestamp;
union {
DWORD dwAudioAttributes;
DWORD dwVideoAttributes;
};
DWORD dwReserved;
} RTP_PD, *PRTP_PD;
/*****************************************************************************
* @doc INTERNAL CRTPPDSTRUCTENUM
*
* @struct RTP_PD_HEADER | The <t RTP_PD_HEADER> structure is used to specify
* the details of the RTP Pd format.
*
* @field DWORD | dwThisHeaderLength | Specifies the length, in bytes, of
* this structure. This field is the offset to the first <t RTP_PD>
* structure.
*
* @field DWORD | dwTotalByteLength | Specifies the length, in bytes, of the
* entire data. This includes this structure, the <t RTP_PD> structures,
* and the payload information.
*
* @field DWORD | dwNumHeaders | Specifies the number of <t RTP_PD>
* structures.
*
* @field DWORD | dwReserved | Reserved. Shall be set to 0.
***************************************************************************/
typedef struct tagRTP_PD_HEADER
{
DWORD dwThisHeaderLength;
DWORD dwTotalByteLength;
DWORD dwNumHeaders;
DWORD dwReserved;
} RTP_PD_HEADER, *PRTP_PD_HEADER;
/*****************************************************************************
* @doc INTERNAL CRTPPDSTRUCTENUM
*
* @struct RTP_PD_INFO | The <t RTP_PD_INFO> structure is used to specify the
* details of the RTP Pd format.
*
* @field REFERENCE_TIME | AvgTimePerSample | Specifies the average time per
* list of RTP packet descriptor, in 100ns units. This value shall be
* identical to the value of the <p AvgTimePerFrame> field of the video
* info header of the related compressed video stream format.
*
* @field DWORD | dwMaxRTPPacketizationDescriptorBufferSize | Specifies the
* maximum size in bytes of the entire RTP packetization descriptor buffer.
* The format of this buffer is described in the following section. The
* maximum size of the entire RTP packetization descriptor buffer rarely
* needs to exceed a few hundred bytes.
*
* @field DWORD | dwMaxRTPPayloadHeaderSize | Specifies the maximum size in
* bytes of the payload header data for one RTP packet. For example, the
* maximum size of a payload header for H.263 version 1 is 12 bytes (Mode
* C header).
*
* @field DWORD | dwMaxRTPPacketSize | Specifies the maximum RTP packet
* size in bytes to be described by the list of packetization descriptor.
* Typically, this number is just below the MTU size of the network.
*
* @field DWORD | dwNumLayers | Specifies the number of encoding layers to
* be described by the list of packetization descriptor. Typically, this
* number is equal to 1. Only in the case of multi-layered encoders would
* this number be higher than 1.
*
* @field DWORD | dwPayloadType | Specifies the static payload type the
* stream describes. If the RTP packetization descriptors do not apply to
* an existing static payload type but a dynamic payload type, this field
* shall be set to DYNAMIC_PAYLOAD_TYPE (defined as MAXDWORD).
*
* @field DWORD | dwDescriptorVersion | Specifies a version identifier
* qualifying the format of packetization descriptors. This field shall
* be set to VERSION_1 (defined as 1UL) to identify the packetization
* descriptor structures described in the next section.
*
* @field DWORD | dwReserved[4] | Reserved. Shall all be set to 0.
***************************************************************************/
typedef struct tagRTP_PD_INFO {
REFERENCE_TIME AvgTimePerSample;
DWORD dwMaxRTPPacketizationDescriptorBufferSize;
DWORD dwMaxRTPPayloadHeaderSize;
DWORD dwMaxRTPPacketSize;
DWORD dwNumLayers;
DWORD dwPayloadType;
DWORD dwDescriptorVersion;
DWORD dwReserved[4];
} RTP_PD_INFO, *PRTP_PD_INFO;
/*****************************************************************************
* @doc INTERNAL CRTPPDSTRUCTENUM
*
* @struct RTP_PD_CONFIG_CAPS | The <t RTP_PD_CONFIG_CAPS> structure is used
* to store the RTP packetization descriptor configuration capabilities.
*
* @field DWORD | dwSmallestRTPPacketSize | Specifies the size in bytes of the
* smallest RTP packet the stream can describe (typically, 512 bytes on Modem).
*
* @field DWORD | dwLargestRTPPacketSize | Specifies the size in bytes of the
* largest packet the stream can describe (typically, 1350 bytes on LAN).
*
* @field DWORD | dwRTPPacketSizeGranularity | Specifies the granularity of
* the increments between the smallest and largest packet size the stream
* supports (ex. 1).
*
* @field DWORD | dwSmallestNumLayers | Specifies the smallest number of
* encoding layers the stream can describe (typically 1).
*
* @field DWORD | dwLargestNumLayers | Specifies the largest number of
* encoding layers the stream can describe (typically 1).
*
* @field DWORD | dwNumLayersGranularity | Specifies the granularity of the
* increments between the smallest and largest number of encoding layers
* the stream supports (ex. 0).
*
* @field DWORD | dwNumStaticPayloadTypes | Specifies the number of static
* payload types the stream supports. This value is valid between 0 and
* 4 (ex. 2 if it supports RFC 2190 and 2429 with H.263, but typically
* only 1).
*
* @field DWORD | dwStaticPayloadTypes[4] | Specifies an array of static
* payload types the stream supports. A stream can support at most 4
* static payload types. The number of valid entries in this array is
* indicated by the <p dwNumStaticPayloadTypes> field (ex. 34 for H.263).
*
* @field DWORD | dwNumDescriptorVersions | Specifies the number of
* packetization descriptor versions the stream supports. This value is
* valid between 1 and 4 (typically 1).
*
* @field DWORD | dwDescriptorVersions[4] | Specifies an array of version
* identifiers qualifying the format of packetization descriptors. A
* stream can support at most 4 packetization descriptor versions. The
* number of valid entries in this array is indicated by the
* <p dwNumDescriptorVersions> field (ex. VERION_1).
*
* @field DWORD | dwReserved[4] | Reserved. Shall all be set to 0.
***************************************************************************/
typedef struct tagRTP_PD_CONFIG_CAPS {
DWORD dwSmallestRTPPacketSize;
DWORD dwLargestRTPPacketSize;
DWORD dwRTPPacketSizeGranularity;
DWORD dwSmallestNumLayers;
DWORD dwLargestNumLayers;
DWORD dwNumLayersGranularity;
DWORD dwNumStaticPayloadTypes;
DWORD dwStaticPayloadTypes[4];
DWORD dwNumDescriptorVersions;
DWORD dwDescriptorVersions[4];
DWORD dwReserved[4];
} RTP_PD_CONFIG_CAPS, *PRTP_PD_CONFIG_CAPS;
#endif // _RTPPKTD_H_