audiostrm.hpp
来自「Motion JPEG编解码器源代码」· HPP 代码 · 共 219 行
HPP
219 行
/* * audiostrm.hpp: Audio stream class sub-hierarchy for MPEG multiplexing * * Copyright (C) 2001 Andrew Stevens <andrew.stevens@philips.com> * * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public License * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef __AUDIOSTRM_H__#define __AUDIOSTRM_H__#include "inputstrm.hpp"#include "stream_params.hpp"// TODO AudioStream is reall NonVideoStream as it is also a base for// SUBPStream (sub)classesclass AudioStream : public ElementaryStream{public: AudioStream(IBitStream &ibs, Multiplexor &into ); virtual void Init(const int stream_num) = 0; virtual void Close() = 0; void OutputSector(); bool RunOutComplete(); virtual unsigned int NominalBitRate() = 0; unsigned int num_syncword;protected: virtual void FillAUbuffer(unsigned int frames_to_buffer) = 0; /* State variables for scanning source bit-stream */ AUnit access_unit; unsigned int header_skip;}; class MPAStream : public AudioStream{public: MPAStream(IBitStream &ibs, Multiplexor &into ); virtual void Init(const int stream_num); static bool Probe(IBitStream &bs); virtual void Close(); virtual unsigned int NominalBitRate();private: void OutputHdrInfo(); unsigned int SizeFrame( int bit_rate, int padding_bit ); virtual void FillAUbuffer(unsigned int frames_to_buffer); /* Stream information for logging and parsing purposes */ unsigned int samples_per_second; unsigned int version_id ; unsigned int layer ; unsigned int protection ; unsigned int bit_rate_code; unsigned int frequency ; unsigned int mode ; unsigned int mode_extension ; unsigned int copyright ; unsigned int original_copy ; unsigned int emphasis ; /* State variables for scanning source bit-stream */ unsigned int framesize; unsigned int num_frames [2]; unsigned int size_frames[2];}; class AC3Stream : public AudioStream{public: AC3Stream(IBitStream &ibs,Multiplexor &into ); virtual void Init(const int stream_num); static bool Probe(IBitStream &bs); virtual void Close(); virtual unsigned int NominalBitRate(); virtual unsigned int ReadPacketPayload(uint8_t *dst, unsigned int to_read); virtual unsigned int StreamHeaderSize() { return 4; } private: void OutputHdrInfo(); void DisplayAc3HeaderInfo(); virtual void FillAUbuffer(unsigned int frames_to_buffer); static const unsigned int default_buffer_size; /* State variables for scanning source bit-stream */ unsigned int framesize; unsigned int frequency; unsigned int samples_per_second; unsigned int bit_rate; unsigned int stream_num; unsigned int num_frames;}; class DTSStream : public AudioStream{public: DTSStream(IBitStream &ibs,Multiplexor &into ); virtual void Init(const int stream_num); static bool Probe(IBitStream &bs); virtual void Close(); virtual unsigned int NominalBitRate(); virtual unsigned int ReadPacketPayload(uint8_t *dst, unsigned int to_read); virtual unsigned int StreamHeaderSize() { return 4; } private: void OutputHdrInfo();#ifdef DEBUG_DTS void DisplayDtsHeaderInfo();#endif virtual void FillAUbuffer(unsigned int frames_to_buffer); static const unsigned int default_buffer_size; /* State variables for scanning source bit-stream */ unsigned int framesize; unsigned int samples_per_second; unsigned int bit_rate; unsigned int stream_num; unsigned int frequency ; unsigned int num_frames;}; class LPCMStream : public AudioStream{public: LPCMStream(IBitStream &ibs, LpcmParams *parms, Multiplexor &into ); virtual void Init(const int stream_num); static bool Probe(IBitStream &bs); virtual void Close(); virtual unsigned int NominalBitRate(); virtual unsigned int ReadPacketPayload(uint8_t *dst, unsigned int to_read); virtual unsigned int StreamHeaderSize() { return 7; } private: void OutputHdrInfo(); virtual void FillAUbuffer(unsigned int frames_to_buffer); static const unsigned int default_buffer_size; static const unsigned int ticks_per_frame_90kHz; unsigned int num_frames; /* State variables for scanning source bit-stream */ unsigned int stream_num; unsigned int samples_per_second; unsigned int channels; unsigned int bits_per_sample; unsigned int bytes_per_frame; unsigned int frame_index; unsigned int dynamic_range_code; LpcmParams *parms;}; class SUBPStream : public AudioStream{public: SUBPStream(IBitStream &ibs,Multiplexor &into ); virtual void Init(const int stream_num); virtual void Close(); // TODO: rough and ready measure... virtual unsigned int NominalBitRate() {return 50*1024;} virtual unsigned int ReadPacketPayload(uint8_t *dst, unsigned int to_read); virtual unsigned int StreamHeaderSize() { return 1; } private: void OutputHdrInfo(); virtual void FillAUbuffer(unsigned int frames_to_buffer); static const unsigned int default_buffer_size; /* State variables for scanning source bit-stream */ unsigned int framesize; unsigned int samples_per_second; unsigned int bit_rate; unsigned int stream_num; unsigned int frequency ; unsigned int num_frames;}; #endif // __AUDIOSTRM_H__/* * Local variables: * c-file-style: "stroustrup" * tab-width: 4 * indent-tabs-mode: nil * End: */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?