mpeg3_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. 2002.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. /*
  22.  * mp4_bytestream.h - provides bytestream access to quicktime files
  23.  */
  24. #ifndef __MPEG3_BYTESTREAM_H__
  25. #define __MPEG3_BYTESTREAM_H__
  26. #include "libmpeg3.h"
  27. #include "our_bytestream.h"
  28. #include "player_util.h"
  29. //#define OUTPUT_TO_FILE 1
  30. /*
  31.  * CMp4ByteStreamBase provides base class access to quicktime files.
  32.  * Most functions are shared between audio and video.
  33.  */
  34. class CMpeg3VideoByteStream : public COurInByteStream
  35. {
  36.  public:
  37.   CMpeg3VideoByteStream(mpeg3_t *file, int track);
  38.   ~CMpeg3VideoByteStream();
  39.   int eof(void);
  40.   void reset(void);
  41.   uint64_t start_next_frame(uint8_t **buffer,
  42.     uint32_t *buflen,
  43.     void **ud);
  44.   void used_bytes_for_frame(uint32_t bytes);
  45.   int can_skip_frame(void) { return 1; };
  46.   int skip_next_frame(uint64_t *ts, int *hasSyncFrame, uint8_t **buffer,
  47.       uint32_t *buflen);
  48.   double get_max_playtime(void);
  49.   void set_start_time(uint64_t start);
  50.  private:
  51. #ifdef OUTPUT_TO_FILE
  52.   FILE *m_output_file;
  53. #endif
  54.   mpeg3_t *m_file;
  55.   int m_stream;
  56.   int m_eof;
  57.   float m_frame_rate;
  58.   long m_frames_max;
  59.   long m_frame_on;
  60.   u_int8_t *m_buffer;
  61.   long m_buffersize_max;
  62.   long m_this_frame_size;
  63.   uint64_t m_total;
  64.   void set_timebase(double time);
  65.   double m_max_time;
  66.   int m_changed_time;
  67. };
  68. class CMpeg3AudioByteStream : public COurInByteStream
  69. {
  70.  public:
  71.   CMpeg3AudioByteStream(mpeg3_t *file, int track);
  72.   ~CMpeg3AudioByteStream();
  73.   int eof(void);
  74.   void reset(void);
  75.   uint64_t start_next_frame(uint8_t **buffer,
  76.     uint32_t *buflen,
  77.     void **ud);
  78.   void used_bytes_for_frame(uint32_t bytes);
  79.   int can_skip_frame(void) { return 1; };
  80.   int skip_next_frame(uint64_t *ts, int *hasSyncFrame, uint8_t **buffer,
  81.       uint32_t *buflen);
  82.   double get_max_playtime(void);
  83.   void set_start_time(uint64_t start);
  84.  private:
  85. #ifdef OUTPUT_TO_FILE
  86.   FILE *m_output_file;
  87. #endif
  88.   mpeg3_t *m_file;
  89.   int m_stream;
  90.   int m_eof;
  91.   uint32_t m_samples_per_frame;
  92.   uint32_t m_freq;
  93.   long m_frames_max;
  94.   long m_frame_on;
  95.   u_int8_t *m_buffer;
  96.   uint32_t m_buffersize_max;
  97.   uint32_t m_this_frame_size;
  98.   uint64_t m_total;
  99.   void set_timebase(double time);
  100.   double m_max_time;
  101.   int m_changed_time;
  102. };
  103. #ifdef _WIN32
  104. DEFINE_MESSAGE_MACRO(mpeg3f_message, "mpeg3file")
  105. #else
  106. #define mpeg3f_message(loglevel, fmt...) message(loglevel, "mpeg3file", fmt)
  107. #endif
  108. #endif