Source: advancedaudiopacket.h
|
|
|
|
// ##########################################################################
// #### ####
// #### RTP Audio Server Project ####
// #### ============================ ####
// #### ####
// #### Advanced Audio Packet Defitition ####
// #### ####
// #### Version 1.00 -- February 23, 2001 ####
// #### ####
// #### Copyright (C) 1999 Thomas Dreibholz ####
// #### 2000 Universität Bonn, Abt. IV ####
// #### 2001 EMail: Dreibholz@bigfoot.com ####
// #### WWW: http://www.bigfoot.com/~dreibholz ####
// #### ####
// ##########################################################################
#ifndef ADVANCEDAUDIOPACKET_H
#define ADVANCEDAUDIOPACKET_H
#include "system.h"
#include "mediainfo.h"
#include "transportinfo.h"
#include "audioquality.h"
namespace Coral {
/**
* This class defines the packet format for the advanced audio encoder.
*
* @short Advanced Audio Packet
* @author Thomas Dreibholz (Dreibholz@bigfoot.com)
* @version 1.0
*
* @see AdvancedAudioEncoder
* @see AdvancedAudioDecoder
*/
class AdvancedAudioPacket
{
// ====== Constructor ====================================================
public:
/**
* Constructor.
*/
AdvancedAudioPacket();
// ====== Byte order translation =========================================
/**
* Translate byte order.
*/
void translate();
// ====== Status functions ===============================================
/**
* Reset report.
*/
void reset();
// ====== Constants and static members ===================================
/**
* Type ID for Advanced Audio Encoding.
*/
static const card16 AdvancedAudioTypeID = 0x2909;
/**
* Name for Advanced Audio Encoding.
*/
static const char AdvancedAudioTypeName[];
/**
* Advanced Audio Encoding package format ID.
*/
static const card32 AdvancedAudioFormatID = 0x74660000 | AdvancedAudioTypeID;
/**
* Advanced Audio MediaInfo packets per second.
*/
static const cardinal AdvancedAudioMediaInfoPacketsPerSecond = 2;
/**
* Advanced Audio frames per second.
*/
static const cardinal AdvancedAudioFramesPerSecond = 35;
/**
* Advanced Audio frame size.
*/
static const cardinal AdvancedAudioFrameSize = 5040;
/**
* Advanced Audio maximum transfer delay.
*/
static const cardinal AdvancedAudioMaxTransferDelay = 100 * 16; // 100 ms.
/**
* Advanced Audio maximum quality layers.
*/
static const cardinal AdvancedAudioMaxQualityLayers = 3;
/**
* Advanced Audio quality levels.
*/
static const cardinal AdvancedAudioQualityLevels = AudioQuality::QualityLevels;
/**
* Advanced Audio loss threshold for quality decrement.
*/
static const double AdvancedAudioUpperLossThreshold = 0.05;
/**
* Advanced Audio loss threshold for quality increment.
*/
static const double AdvancedAudioLowerLossThreshold = 0.025;
/**
* Get TransportInfo constants for given header size and maximum packet size.
*
* @param transportInfo Memory to store TransportInfo.
* @param headerSize Size of packet header (e.g. RTP header).
* @param maxPacketSize Maximum size of a packet.
* @param lastTransmissionQuality Quality of last transmission.
* @param calculateLevels true to calculate all level constants; false otherwise.
*/
static void getTransportInfoConstants(
TransportInfo& transportInfo,
const cardinal headerSize,
const cardinal maxPacketSize,
const AudioQualityInterface& lastTransmissionQuality,
const bool calculateLevels = true);
/**
* Get TransportInfo for given header size and maximum packet size.
*
* @param transportInfo Memory to store TransportInfo.
* @param headerSize Size of packet header (e.g. RTP header).
* @param maxPacketSize Maximum size of a packet.
* @param qualitySetting Current quality setting.
* @param lastTransmissionQuality Quality of last transmission.
* @param calculateLevels true to calculate all level constants; false otherwise.
*/
static void getTransportInfo(TransportInfo& transportInfo,
const cardinal headerSize,
const cardinal maxPacketSize,
const AudioQualityInterface& qualitySetting,
const AudioQualityInterface& lastTransmissionQuality,
const bool calculateLevels = true);
/**
* Calculate TransportInfoLevel for given quality and
* given header size and maximum packet size.
*
* @param level Memory to store calculated TransportInfoLevel.
* @param headerSize Size of packet header (e.g. RTP header).
* @param maxPacketSize Maximum size of a packet.
* @param quality Quality to calculate level for.
*/
static void calculateLevelForQuality(TransportInfoLevel& level,
const cardinal headerSize,
const cardinal maxPacketSize,
const AudioQualityInterface& quality);
/**
* Quality calculation for given user quality limited by input quality,
* byte rate and network quality decrement with given header size
* (eg. IP + UDP + RTP) and maximum packet size.
*
* @param userSetting User's quality setting.
* @param inputQuality Input source's quality.
* @param byteRateLimit Byte rate limit.
* @param byteRateLimitL1 Layer #0 byte rate limit.
* @param byteRateLimitL2 Layer #1 byte rate limit.
* @param byteRateLimitL3 Layer #2 byte rate limit.
* @param networkQualityDecrement Number of steps for decrement of user's quality.
* @param headerSize Header size (eg. IP + UDP + RTP). AdvancedAudioPacket size is added automatically.
* @param maxPacketSize Maximum packet size.
* @return The calculated quality.
*/
static AudioQuality calculateQualityForLimits(
const AudioQualityInterface& userSetting,
const AudioQualityInterface& inputQuality,
const card64 totalByteRateLimit,
const card64 byteRateLimitL1,
const card64 byteRateLimitL2,
const card64 byteRateLimitL3,
const cardinal networkQualityDecrement,
const cardinal headerSize,
const cardinal maxPacketSize);
/**
* Calculate output frame size from given input bytes per second and input
* frame size.
*
* @param inputBytesPerSecond Input source's bytes per second.
* @param inputFrameSize Input source's frame size.
* @return The calculated frame size.
*/
static cardinal calculateFrameSize(const cardinal inputBytesPerSecond,
const cardinal inputFrameSize);
/**
* Calculate number of layers for given quality.
*
* @param quality Quality.
* @return Number of layers.
*/
static cardinal calculateLayers(const AudioQualityInterface& quality);
// ====== Packet data ====================================================
public:
/**
* Packet format ID.
*/
card32 FormatID;
/**
* Audio sampling rate.
*/
card16 SamplingRate;
/**
* Number of audio channels.
*/
card8 Channels;
/**
* Number of audio bits.
*/
card8 Bits;
/**
* Current position in nanoseconds.
*/
card64 Position;
/**
* Maximum position in nanoseconds.
*/
card64 MaxPosition;
/**
* Error code.
*/
card8 ErrorCode;
/**
* Advanced Audio Encoding Flags.
*/
card8 Flags;
/**
* Emumeration of Flags.
*/
enum AdvancedAudioFlags {
AAF_ChannelLeft = (1 << 0),
AAF_ChannelRight = (1 << 1),
AAF_ByteUpper = (1 << 2),
AAF_ByteLower = (1 << 3),
AAF_MediaInfo = (1 << 4)
};
/**
* Fragment number.
*/
card16 Fragment;
/**
* Packet data.
*/
char Data[0];
};
}
#endif
Generated by: viper@odin on Fri Feb 23 12:41:26 2001, using kdoc 2.0a36. |