rtpTools.cxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* ====================================================================
  2.  * The Vovida Software License, Version 1.0 
  3.  * 
  4.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5.  * 
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in
  15.  *    the documentation and/or other materials provided with the
  16.  *    distribution.
  17.  * 
  18.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  19.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  20.  *    not be used to endorse or promote products derived from this
  21.  *    software without prior written permission. For written
  22.  *    permission, please contact vocal@vovida.org.
  23.  *
  24.  * 4. Products derived from this software may not be called "VOCAL", nor
  25.  *    may "VOCAL" appear in their name, without prior written
  26.  *    permission of Vovida Networks, Inc.
  27.  * 
  28.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  29.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  31.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  32.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  33.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  34.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  35.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  36.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  37.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  38.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  39.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  40.  * DAMAGE.
  41.  * 
  42.  * ====================================================================
  43.  * 
  44.  * This software consists of voluntary contributions made by Vovida
  45.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  46.  * Inc.  For more information on Vovida Networks, Inc., please see
  47.  * <http://www.vovida.org/>.
  48.  *
  49.  */
  50. static const char* const rtpTools_cxx_Version =
  51.     "$Id: rtpTools.cxx,v 1.12 2001/03/21 01:02:22 kimle Exp $";
  52. #include <iostream>
  53. #include <stdio.h>
  54. #include <stdlib.h>
  55. #include "rtpTypes.h"
  56. #include "rtpTools.hxx"
  57. #include "cpLog.h"
  58. //#include "vsock.hxx"
  59. /* ----------------------------------------------------------------- */
  60. /* --- Number Functions -------------------------------------------- */
  61. /* ----------------------------------------------------------------- */
  62. /*  32-bit random number     */
  63. u_int32_t generate32 ()
  64. {
  65.     // should be seeded by main program
  66.     return random();
  67. }
  68. /*  random SRC number        */
  69. RtpSrc generateSRC()
  70. {
  71.     // doesn't check for collision
  72.     RtpSrc src = 0;
  73.     while (src == 0)
  74.         src = generate32();
  75.     return src;
  76. }
  77. /*  prints raw bits of memory */
  78. void printBits (char* packetData, int len)
  79. {
  80.     unsigned short int b;
  81.     unsigned int c = 0;
  82.     cerr << "n-----------------------------------n";
  83.     for (int i = 0; i < len; i++)
  84.     {
  85.         if (i % 4 == 0 && i != 0)
  86.         {
  87.             printf ("  %2.2X%2.2X%2.2X%2.2Xn",
  88.                     static_cast < unsigned char > (packetData[i - 4]),
  89.                     static_cast < unsigned char > (packetData[i - 3]),
  90.                     static_cast < unsigned char > (packetData[i - 2]),
  91.                     static_cast < unsigned char > (packetData[i - 1])
  92.                    );
  93.             c = 0;
  94.         }
  95.         b = static_cast < unsigned short int > (
  96.                 static_cast < unsigned char > (packetData[i]));
  97.         char out[9];
  98.         for (int j = 0; j < 8; j++)
  99.         {
  100.             if (b % 2)
  101.                 out[7 - j] = '1';
  102.             else
  103.                 out[7 - j] = '0';
  104.             c = 2 * c + b % 2;
  105.             b = b >> 1;
  106.         }
  107.         out[8] = '';
  108.         cerr << out;
  109.         cerr << " ";
  110.     }
  111. }
  112. void printInt(int x)
  113. {
  114.     char* packetData = reinterpret_cast < char* > (&x);
  115.     for (int i = 0; i < 4; i++)
  116.     {
  117.         char out[9];
  118.         unsigned short int b = static_cast < unsigned short int > (
  119.                                    static_cast < unsigned char > (packetData[i]));
  120.         for (int j = 0; j < 8; j++)
  121.         {
  122.             if (b % 2)
  123.                 out[7 - j] = '1';
  124.             else
  125.                 out[7 - j] = '0';
  126.             b = b >> 1;
  127.         }
  128.         out[8] = '';
  129.         cerr << out;
  130.         cerr << " ";
  131.     }
  132.     printf ("  %2.2X%2.2X%2.2X%2.2Xn",
  133.             static_cast < unsigned char > (packetData[0]),
  134.             static_cast < unsigned char > (packetData[1]),
  135.             static_cast < unsigned char > (packetData[2]),
  136.             static_cast < unsigned char > (packetData[3])
  137.            );
  138.     return ;
  139. }
  140. bool RtpSeqGreater (RtpSeqNumber a, RtpSeqNumber b)
  141. {
  142.     if ( (a > (RTP_SEQ_MOD - 20) && b < 20) || (a < 20 && b > RTP_SEQ_MOD - 20) )
  143.     {
  144.         //cpLog(LOG_DEBUG_STACK,"backwards compare %d > %d", a, b);
  145.         return (a < b);
  146.     }
  147.     else
  148.         return (a > b);
  149. }
  150. bool RtpTimeGreater( RtpTime a, RtpTime b )
  151. {
  152.     if ( (a > (RTP_TIME_MOD - 1600) && b < 1600) || (a <1600 && b > RTP_TIME_MOD - 1600) )
  153.     {
  154.         //cpLog(LOG_DEBUG_STACK,"backwards compare %d > %d", a, b);
  155.         return (a < b);
  156.     }
  157.     else
  158.         return (a > b);
  159. }