Source: simpleaudiopacket.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                      RTP Audio Server Project                    ####
// ####                    ============================                  ####
// ####                                                                  ####
// #### Simple Audio Packet                                              ####
// ####                                                                  ####
// #### 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 SIMPLEAUDIOPACKET_H
#define SIMPLEAUDIOPACKET_H


#include "system.h"
#include "mediainfo.h"
#include "transportinfo.h"
#include "audioquality.h"


namespace Coral {


/**
  * This class defines the packet format for the simple audio encoder.
  *
  * @short   Simple Audio Packet
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
  *
  * @see SimpleAudioEncoder
  * @see SimpleAudioDecoder
  */
class SimpleAudioPacket
{
   // ====== Constructor ====================================================
   public:
   /**
     * Constructor.
     */
   SimpleAudioPacket();

   // ====== Byte order translation =========================================
   /**
     * Translate byte order.
     */
   void translate();


   // ====== Status functions ===============================================
   /**
     * Reset report.
     */
   void reset();

 
   // ====== Constants ======================================================
   /**
     * Type ID for Simple Audio Encoding.
     */
   static const card16 SimpleAudioTypeID = 0x1234;

   /**
     * Name for Simple Audio Encoding.
     */
   static const char SimpleAudioTypeName[];

   /**
     * Simple Audio Encoding package format ID.
     */
   static const card32 SimpleAudioFormatID = 0x74660000 | SimpleAudioTypeID;

   /**
     * Simple Audio MediaInfo packets per second.
     */
   static const cardinal SimpleAudioMediaInfoPacketsPerSecond = 1;

   /**
     * Simple Audio frames per second.
     */
   static const cardinal SimpleAudioFramesPerSecond = 15;

   /**
     * Simple Audio frame size.
     */
   static const cardinal SimpleAudioFrameSize = 2352 * 5;

   /**
     * Simple Audio maximum transfer delay.
     */
   static const cardinal SimpleAudioMaxTransferDelay = 1500 * 16; // 1500 ms.

   /**
     * Simple Audio number of quality levels.
     */
   static const cardinal SimpleAudioQualityLevels = AudioQuality::QualityLevels;

   /**
     * Simple Audio loss threshold for quality decrement.
     */
   static const double SimpleAudioUpperLossThreshold = 0.04;

   /**
     * Simple Audio loss threshold for quality increment.
     */
   static const double SimpleAudioLowerLossThreshold = 0.01;


   /**
     * 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 networkQualityDecrement Number of steps for decrement of user's quality.
     * @param headerSize Header size (eg. IP + UDP + RTP). SimpleAudioPacket 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 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);


   // ====== 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;

   /**
     * Flags.
     */
   card8 Flags;

   /**
     * Emumeration of Flags.
     */
   enum SimpleAudioFlags {
      SAF_Data      = 0,
      SAF_MediaInfo = 1,
   };

   /**
     * Packet data.
     */   
   char Data[0];
};


}


#endif
            

Generated by: viper@odin on Fri Feb 23 12:41:26 2001, using kdoc 2.0a36.