rfc3119_bytestream.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. /*
  22.  * player_rtp_bytestream.h - provides an RTP bytestream for the codecs
  23.  * to access
  24.  */
  25. #ifndef __RFC3119_BYTESTREAM_H__
  26. #define __RFC3119_BYTESTREAM_H__ 1
  27. #include "systems.h"
  28. #include "rtp_bytestream.h"
  29. #include <sdp/sdp.h>
  30. #include <mp4av/mp4av.h>
  31. typedef struct adu_data_t {
  32.   struct adu_data_t *next_adu;
  33.   rtp_packet *pak;
  34.   uint8_t *frame_ptr;
  35.   int aduDataSize;
  36.   uint64_t timestamp;
  37.   char first_in_pak;
  38.   char last_in_pak;
  39.   char freeframe;
  40.   //isma_frag_data_t *frag_data;
  41.   int headerSize;
  42.   int sideInfoSize;
  43.   int backpointer;
  44.   int framesize;
  45.   MP4AV_Mp3Header mp3hdr;
  46.   
  47.   int interleave_idx;
  48.   int cyc_ct;
  49. } adu_data_t;
  50. class CRfc3119RtpByteStream : public CRtpByteStreamBase
  51. {
  52.  public:
  53.   CRfc3119RtpByteStream(unsigned int rtp_pt,
  54. format_list_t *fmt,
  55. int ondemand,
  56. uint64_t tickpersec,
  57. rtp_packet **head, 
  58. rtp_packet **tail,
  59. int rtp_seq_set,
  60. uint16_t rtp_base_seq,
  61. int rtp_ts_set,
  62. uint32_t rtp_base_ts,
  63. int rtcp_received,
  64. uint32_t ntp_frac,
  65. uint32_t ntp_sec,
  66. uint32_t rtp_ts);
  67.   ~CRfc3119RtpByteStream();
  68.   void reset(void);
  69.   int have_no_data(void);
  70.   uint64_t start_next_frame(uint8_t **buffer, 
  71.     uint32_t *buflen, 
  72.     void **ud);
  73.   void used_bytes_for_frame(uint32_t byte);
  74.   void flush_rtp_packets(void);
  75.  protected:
  76.   int check_rtp_frame_complete_for_payload_type(void) {
  77.     return m_head != NULL;
  78.   };
  79.  private:
  80. #ifdef ISMA_RTP_DUMP_OUTPUT_TO_FILE
  81.   FILE *m_outfile;
  82. #endif
  83.   adu_data_t *m_adu_data_free;
  84.   adu_data_t *m_deinterleave_list;
  85.   adu_data_t *m_ordered_adu_list;
  86.   adu_data_t *m_pending_adu_list;
  87.   uint32_t m_rtp_ts_add;
  88.   int m_recvd_first_pak;
  89.   int m_got_next_idx;
  90.   int m_have_interleave;
  91.   uint8_t *m_mp3_frame;
  92.   uint32_t m_mp3_frame_size;
  93.   
  94.   int insert_frame_data(adu_data_t *pak);
  95.   adu_data_t *get_adu_data (void) {
  96.     adu_data_t *pak;
  97.     if (m_adu_data_free == NULL) {
  98.       pak = MALLOC_STRUCTURE(adu_data_t);
  99.       if (pak == NULL) return NULL;
  100.     } else {
  101.       pak = m_adu_data_free;
  102.       m_adu_data_free = pak->next_adu;
  103.     }
  104.     pak->next_adu = NULL;
  105.     pak->last_in_pak = 0;
  106.     return (pak);
  107.   }
  108.   void free_adu(adu_data_t *adu);
  109.   void dump_adu_list (adu_data_t *lptr) {
  110.     adu_data_t *p;
  111.     while (lptr != NULL) {
  112.       p = lptr->next_adu;
  113.       free_adu(lptr);
  114.       lptr = p;
  115.     }
  116.   }
  117.   void insert_interleave_adu(adu_data_t *adu);
  118.   int insert_processed_adu(adu_data_t *adu);
  119.   void process_packet(void);
  120.   int needToGetAnADU(void);
  121.   void add_and_insertDummyADUsIfNecessary(void);
  122. };
  123. #endif