header.h
资源名称:VC++视频传输.rar [点击查看]
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:4k
源码类别:
VC书籍
开发平台:
Visual C++
- /* header.h
- Declarations for MPEG header class
- A few layer III, MPEG-2 LSF, and seeking modifications made by Jeff Tsay.
- Last modified : 04/19/97 */
- /*
- * @(#) header.h 1.7, last edit: 6/15/94 16:55:33
- * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de)
- * @(#) Berlin University of Technology
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- #ifndef HEADER_H
- #define HEADER_H
- #include "all.h"
- #include "ibitstr.h"
- #include "crc.h"
- enum e_version { MPEG2_LSF, MPEG1 };
- enum e_mode { stereo, joint_stereo, dual_channel, single_channel };
- enum e_sample_frequency { fourtyfour_point_one, fourtyeight, thirtytwo };
- // Class for extraction information from a frame header:
- class Header
- {
- private:
- static const uint32 frequencies[2][4];
- uint32 h_layer, h_protection_bit, h_bitrate_index,
- h_padding_bit, h_mode_extension;
- e_version h_version;
- e_mode h_mode;
- e_sample_frequency h_sample_frequency;
- uint32 h_number_of_subbands, h_intensity_stereo_bound;
- bool h_copyright, h_original;
- bool initial_sync;
- Crc16 *crc;
- uint32 *offset;
- uint16 checksum;
- uint32 framesize;
- uint32 nSlots;
- public:
- Header();
- Header(const Header &h0);
- ~Header();
- Header& operator = (const Header &h0);
- bool read_header(Ibitstream *stream, Crc16 **crc);
- // read a 32-bit header from the bitstream
- // functions to query header contents:
- e_version version() const { return h_version; }
- uint32 layer() const { return h_layer; }
- uint32 bitrate_index() const { return h_bitrate_index; }
- e_sample_frequency sample_frequency() const
- {
- return h_sample_frequency;
- }
- uint32 frequency() const
- {
- return frequencies[h_version][h_sample_frequency];
- }
- e_mode mode() const { return h_mode; }
- bool checksums() const { return (bool) !h_protection_bit; }
- bool copyright() const { return h_copyright; }
- bool original() const { return h_original; }
- bool checksum_ok () const { return (bool) (checksum == crc->checksum ()); }
- // compares computed checksum with stream checksum
- // Seeking and layer III stuff
- bool padding() const { return (bool) h_padding_bit; }
- uint32 slots() const { return nSlots; }
- uint32 mode_extension() const { return h_mode_extension; }
- uint32 calculate_framesize(); // made public
- // functions which return header informations as strings:
- const char * layer_string() const;
- const char * bitrate_string() const;
- const char * sample_frequency_string() const;
- const char * mode_string() const;
- const char * version_string() const;
- uint32 number_of_subbands() const
- // returns the number of subbands in the current frame
- {
- return h_number_of_subbands;
- }
- uint32 intensity_stereo_bound() const
- // (Layer II joint stereo only)
- // returns the number of subbands which are in stereo mode,
- // subbands above that limit are in intensity stereo mode
- {
- return h_intensity_stereo_bound;
- }
- // Scrolling stuff
- #ifdef SEEK_STOP
- bool stream_seek(Ibitstream *stream, uint32 seek_pos);
- #endif // SEEK_STOP
- uint32 max_number_of_frames(Ibitstream *stream) const;
- uint32 min_number_of_frames(Ibitstream *stream) const;
- real ms_per_frame() const;
- // milliseconds per frame, for time display
- real total_ms(Ibitstream *stream) const;
- };
- #endif