亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? header.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
字號:
/*	header.cpp

	Implementation of MPEG header class

	A few layer III, MPEG-2 LSF, and seeking modifications made by
   Jeff Tsay. MPEG-2 LSF is now supported.

   Last modified : 06/04/97 */

   /*
 *  @(#) header.cc 1.8, last edit: 6/15/94 16:51:44
 *  @(#) 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.
 */

/*
 *  Changes from version 1.1 to 1.2:
 *    - iostreams manipulator calls like "cerr << setw (2) << ..." replaced by
 *      "cerr.width (2); ..." due to problems with older GNU C++ releases.
 *    - syncword recognition slightly changed
 */

#ifndef GUI
#include <iostream.h>
#endif  // GUI

#include "header.h"

const uint32 Header::frequencies[2][4] =
{{22050, 24000, 16000, 1},
 {44100, 48000, 32000, 1}};

Header::Header()
{
  	framesize = 0;
   nSlots    = 0;
  	crc       = NULL;
   offset    = NULL;
   initial_sync = false;
}

Header::Header(const Header &h0)
{
  int32 entries;
  int32 i;

  h_layer          = h0.h_layer;
  h_protection_bit = h0.h_protection_bit;
  h_bitrate_index  = h0.h_bitrate_index;
  h_padding_bit    = h0.h_padding_bit;
  h_mode_extension = h0.h_mode_extension;
  h_version        = h0.h_version;
  h_mode           = h0.h_mode;

  h_sample_frequency   = h0.h_sample_frequency;
  h_number_of_subbands = h0.h_number_of_subbands;
  h_intensity_stereo_bound = h0.h_intensity_stereo_bound;

  h_copyright  = h0.h_copyright;
  h_original   = h0.h_original;
  initial_sync = h0.initial_sync;

  crc       = h0.crc;

  if (h0.offset) {

     entries   = sizeof(h0.offset) / sizeof(uint32);
     offset    = new uint32 [entries];

     for (i=0; i<entries; i++)
       	offset[i] = h0.offset[i];

  } else {
     offset = NULL;
  }

  checksum  = h0.checksum;
  framesize = h0.framesize;
  nSlots    = h0.nSlots;
}

Header::~Header()
{
	if (offset != NULL) delete [] offset;
}

Header& Header::operator = (const Header &h0)
{
  int32 entries;
  int32 i;

  h_layer          = h0.h_layer;
  h_protection_bit = h0.h_protection_bit;
  h_bitrate_index  = h0.h_bitrate_index;
  h_padding_bit    = h0.h_padding_bit;
  h_mode_extension = h0.h_mode_extension;
  h_version        = h0.h_version;
  h_mode           = h0.h_mode;

  h_sample_frequency   = h0.h_sample_frequency;
  h_number_of_subbands = h0.h_number_of_subbands;
  h_intensity_stereo_bound = h0.h_intensity_stereo_bound;

  h_copyright  = h0.h_copyright;
  h_original   = h0.h_original;
  initial_sync = h0.initial_sync;

  crc       = h0.crc;

  if (h0.offset) {

	  entries   = sizeof(h0.offset) / sizeof(uint32);

     if (offset != NULL)
        delete [] offset;

	  offset    = new uint32 [entries];

  	  for (i=0; i<entries; i++)
   		offset[i] = h0.offset[i];

  } else {
     offset = NULL;
  }

  checksum  = h0.checksum;
  framesize = h0.framesize;
  nSlots    = h0.nSlots;

  return *this;
}

bool Header::read_header(Ibitstream *stream, Crc16 **crcp)
{
  uint32 headerstring, channel_bitrate;

  if (!initial_sync) {

  	if (!stream->get_header(&headerstring, INITIAL_SYNC))
	 	return false;

  	h_version = (e_version) ((headerstring >> 19) & 1);

   if ((h_sample_frequency = (e_sample_frequency)
                             ((headerstring >> 10) & 3)) == 3)
   {
#ifdef WIN32GUI
		 MessageBox(NULL, "Unknown sample frequency in header",
	    				"Stream not supported", MB_ICONSTOP | MB_OK);
#else
		 cerr << "Unknown sample frequency!" << endl;
#endif
	    return false;
   }

   stream->set_syncword(headerstring & 0xFFF80CC0);

   initial_sync = true;

  } else {

	  	if (!stream->get_header(&headerstring, STRICT_SYNC))
		 	return false;
  } // initial_sync

/*  if ((h_layer = (headerstring >> 17) & 3) == 0)
  {
	 cerr << "unknown layer identifier found!\n";
	 exit (1);
  }
  h_layer = 4 - h_layer;		// now 1 means Layer I and 3 means Layer III   */

  h_layer   = 4 - (headerstring >> 17) & 3;

  h_protection_bit = (headerstring >> 16) & 1;


/*  if ((h_bitrate_index = (headerstring >> 12) & 0xF) == 15)
  {
	 cerr << "unknown bitrate index found!\n";
	 exit (1);
  }           */
/*  if (!h_bitrate_index)
  {
	 cerr << "free format not yet implemented!\n";
	 exit (1);
  } */

  h_bitrate_index  = (headerstring >> 12) & 0xF;

  h_padding_bit = (headerstring >> 9) & 1;
  h_mode        = (e_mode)((headerstring >> 6) & 3);

/*  if (h_layer == 2)
	 // testing validity of mode and bitrate:
	 if ((((h_bitrate_index >= 1 && h_bitrate_index <= 3) || h_bitrate_index == 5) &&
	 h_mode != single_channel) ||
	(h_bitrate_index >= 11 && h_mode == single_channel))
	 {
		cerr << "illegal combination of mode and bitrate in a layer II stream:\n"
			"  mode: " << mode_string ()
		<< "\n  bitrate: " << bitrate_string () << '\n';
		exit (1);
	 } */

  h_mode_extension = (headerstring >> 4) & 3;

  if (h_mode == joint_stereo)
	 h_intensity_stereo_bound = (h_mode_extension << 2) + 4;
  else
	 h_intensity_stereo_bound = 0;		// should never be used

  h_copyright = (bool) ((headerstring >> 3) & 1);
  h_original  = (bool) ((headerstring >> 2) & 1);

  // calculate number of subbands:
  if (h_layer == 1)
	 h_number_of_subbands = 32;
  else
  {
	 channel_bitrate = h_bitrate_index;

	 // calculate bitrate per channel:
	 if (h_mode != single_channel)
		if (channel_bitrate == 4)
			channel_bitrate = 1;
		else
			channel_bitrate -= 4;

	 if ((channel_bitrate == 1) || (channel_bitrate == 2))
		if (h_sample_frequency == thirtytwo)
			h_number_of_subbands = 12;
		else
			h_number_of_subbands = 8;
	 else
		if ((h_sample_frequency == fourtyeight) || ((channel_bitrate >= 3) &&
      													  	  (channel_bitrate <= 5)))
			h_number_of_subbands = 27;
		else
			h_number_of_subbands = 30;
  }

  if (h_intensity_stereo_bound > h_number_of_subbands)
     h_intensity_stereo_bound = h_number_of_subbands;


  // calculate framesize and nSlots
	calculate_framesize();

  // read framedata:
  if (stream->read_frame(framesize) == false)
     return false;

  if (!h_protection_bit)
  {
	 // frame contains a crc checksum
	 checksum = (uint16) stream->get_bits(16);
	 if (!crc)
       crc = new Crc16;
	 crc->add_bits(headerstring, 16);
	 *crcp = crc;
  }
  else
	 *crcp = NULL;

#ifdef SEEK_STOP
  if (h_sample_frequency == fourtyfour_point_one) {

	 if (!offset) {

    	uint32 max = max_number_of_frames(stream);

		offset = new uint32[max];

      for(uint32 i=0; i<max; i++)
      	offset[i] = 0;
    }

    {
     int32 cf = stream->current_frame();
     int32 lf = stream->last_frame();
	  if ((cf > 0) && (cf == lf)) {
		   offset[cf] = offset[cf-1] + h_padding_bit;
     } else {
  	      offset[0] = h_padding_bit;
     }
    }
  }
#endif // SEEK_STOP

  return true;
}

uint32 Header::calculate_framesize()
// calculates framesize in bytes excluding header size
{
  static const int32 bitrates[2][3][16] = {
  {{0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000,
    112000, 128000, 144000, 160000, 176000, 192000 ,224000, 256000, 0},
   {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000,
    56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0},
   {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000,
    56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0}},
  {{0 /*free format*/, 32000, 64000, 96000, 128000, 160000, 192000,
	 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000, 0},
	{0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000,
	 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000, 0},
	{0 /*free format*/, 32000, 40000, 48000, 56000, 64000, 80000,
	 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 0}}
  };

  if (h_layer == 1) {
	 framesize = (12 * bitrates[h_version][0][h_bitrate_index]) /
                 frequencies[h_version][h_sample_frequency];

	 if (h_padding_bit) framesize++;

	 framesize <<= 2;		// one slot is 4 bytes long

    nSlots = 0;

  } else {

	 framesize = (144 * bitrates[h_version][h_layer - 1][h_bitrate_index]) /
                 frequencies[h_version][h_sample_frequency];

	 if (h_version == MPEG2_LSF)
    	framesize >>= 1;

	 if (h_padding_bit) framesize++;

	 // Layer III slots
	 if (h_layer == 3) {

       if (h_version == MPEG1) {

			 nSlots = framesize - ((h_mode == single_channel) ? 17 : 32) // side info size
									  -  (h_protection_bit ? 0 : 2) 		       // CRC size
									  - 4; 								             // header size
       } else {  // MPEG-2 LSF
        	 nSlots = framesize - ((h_mode == single_channel) ?  9 : 17) // side info size
						   		  -  (h_protection_bit ? 0 : 2) 		       // CRC size
									  - 4; 								             // header size
       }
	 } else {
    	 nSlots = 0;
    }
  }

  framesize -= 4;             // subtract header size

  return framesize;
}

const char *Header::layer_string() const
{
  switch (h_layer)
  {
	 case 1:
		return "I";
	 case 2:
		return "II";
	 case 3:
		return "III";
  }
  return NULL;			// dummy
}


const char *Header::bitrate_string() const
{

  static const char *bitrate_str[2][3][16] = {
  {{"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s",
    "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s",
    "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s",
    "forbidden"},
   {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s",
    "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s",
    "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s",
    "forbidden"},
   {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s",
    "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s",
    "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s",
    "forbidden"}},
  {{"free format", "32 kbit/s", "64 kbit/s", "96 kbit/s", "128 kbit/s",
    "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "288 kbit/s",
    "320 kbit/s", "352 kbit/s", "384 kbit/s", "416 kbit/s", "448 kbit/s",
    "forbidden"},
	{"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s",
    "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s",
    "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s", "384 kbit/s",
    "forbidden"},
	{"free format", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s",
    "64 kbit/s", "80 kbit/s" , "96 kbit/s", "112 kbit/s", "128 kbit/s",
    "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s",
    "forbidden"}}
  };

  return bitrate_str[h_version][h_layer - 1][h_bitrate_index];
}

const char *Header::sample_frequency_string() const
{
  switch (h_sample_frequency)
  {
	 case thirtytwo:
    	if (h_version == MPEG1)
			return "32 kHz";
      else
      	return "16 kHz";
	 case fourtyfour_point_one:
    	if (h_version == MPEG1)
			return "44.1 kHz";
      else
      	return "22.05 kHz";
	 case fourtyeight:
    	if (h_version == MPEG1)
			return "48 kHz";
      else
      	return "24 kHz";
  }
  return(NULL);			// dummy
}

const char *Header::mode_string() const
{
  switch (h_mode)
  {
	 case stereo:
		return "Stereo";
	 case joint_stereo:
		return "Joint stereo";
	 case dual_channel:
		return "Dual channel";
	 case single_channel:
		return "Single channel";
  }
  return NULL;			// dummy
}

const char *Header::version_string() const
{
 	switch (h_version)
   {
   	case MPEG1:
        return "MPEG-1";
      case MPEG2_LSF:
        return "MPEG-2 LSF";
   }
   return(NULL);
}

#ifdef SEEK_STOP
// Stream searching routines
bool Header::stream_seek(Ibitstream *stream, uint32 seek_pos)
{
   return((h_sample_frequency == fourtyfour_point_one) ?
          stream->seek_pad(seek_pos, framesize - h_padding_bit,
                           this, offset) :
     		 stream->seek(seek_pos, framesize));
}
#endif

uint32 Header::max_number_of_frames(Ibitstream *stream) const
// Returns the maximum number of frames in the stream
{
	return(stream->file_size() / (framesize + 4 - h_padding_bit));
}

uint32 Header::min_number_of_frames(Ibitstream *stream) const
// Returns the minimum number of frames in the stream
{
   return(stream->file_size() / (framesize + 5 - h_padding_bit));
}

real Header::ms_per_frame() const
{
	static real ms_per_frame_array[3][3] = {{8.707483f,  8.0f, 12.0f},
												       {26.12245f, 24.0f, 36.0f},
   	                                     {26.12245f, 24.0f, 36.0f}};

	return ms_per_frame_array[h_layer-1][h_sample_frequency];
}

real Header::total_ms(Ibitstream *stream) const
{
	return(max_number_of_frames(stream) * ms_per_frame());
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩成人av| av一区二区三区| 精品美女一区二区| 另类小说欧美激情| 久久久久久久综合| caoporen国产精品视频| 国产精品乱码久久久久久| 92精品国产成人观看免费 | av资源网一区| 亚洲免费观看高清完整版在线| 在线视频综合导航| 日本网站在线观看一区二区三区| 日韩午夜在线观看| 国产成人鲁色资源国产91色综 | 337p日本欧洲亚洲大胆精品| 国产福利一区二区三区| 亚洲男人电影天堂| 日韩精品在线网站| 成人国产亚洲欧美成人综合网| 亚洲综合丝袜美腿| 欧美精品一区二区三区四区| 不卡视频在线观看| 午夜在线电影亚洲一区| 久久精品夜夜夜夜久久| 91欧美激情一区二区三区成人| 日本va欧美va欧美va精品| 国产欧美日韩另类视频免费观看| 91久久精品一区二区三区| 日本aⅴ精品一区二区三区 | 一区二区日韩电影| 91精品国产91综合久久蜜臀| 国产99精品视频| 午夜精品一区二区三区三上悠亚| 久久久精品综合| 欧美图区在线视频| 成人黄色av网站在线| 五月婷婷欧美视频| 国产精品三级视频| 精品国产一区二区三区久久久蜜月| 成人黄色av电影| 久久爱www久久做| 亚洲一区在线观看视频| 国产精品天美传媒| 欧美www视频| 欧美精品自拍偷拍| 色香蕉久久蜜桃| 国产成人aaa| 美女www一区二区| 亚洲尤物视频在线| 日韩一区在线播放| 欧美经典三级视频一区二区三区| 日韩写真欧美这视频| 欧美视频三区在线播放| caoporn国产精品| 国产精品1024久久| 久久激情五月婷婷| 日本中文字幕一区二区有限公司| 一区二区三区欧美激情| 中文字幕在线免费不卡| 久久久影视传媒| 久久综合色婷婷| 精品欧美一区二区三区精品久久| 正在播放亚洲一区| 欧美少妇一区二区| 欧美日韩一区在线| 欧洲一区二区av| 色综合视频一区二区三区高清| 国产 欧美在线| 国产精品 欧美精品| 国产老妇另类xxxxx| 精品一区二区在线免费观看| 欧美aaa在线| 麻豆视频观看网址久久| 久久99国产精品麻豆| 久久国产成人午夜av影院| 人禽交欧美网站| 蜜桃av一区二区| 奇米精品一区二区三区在线观看一 | 久久色视频免费观看| 精品国产一区二区三区不卡| 精品盗摄一区二区三区| 精品福利在线导航| 久久久精品综合| 中文字幕精品一区| 亚洲欧美激情一区二区| 亚洲一区在线观看视频| 婷婷成人综合网| 久久99精品国产麻豆婷婷| 国产一区二区三区综合| 成人网页在线观看| 一本高清dvd不卡在线观看| 欧美自拍偷拍午夜视频| 在线播放中文一区| 精品国产欧美一区二区| 国产日韩欧美电影| 一区二区三区四区高清精品免费观看| 亚洲日本中文字幕区| 亚洲一区二区三区小说| 日韩精品1区2区3区| 国产在线不卡视频| 99久久精品99国产精品| 欧美日韩你懂得| 久久先锋资源网| 亚洲欧美偷拍卡通变态| 日韩二区在线观看| 国产白丝精品91爽爽久久| 一本到不卡免费一区二区| 在线成人免费视频| 国产午夜精品一区二区三区嫩草| 亚洲日本在线视频观看| 免费成人在线网站| 成人三级伦理片| 欧美老人xxxx18| 国产偷国产偷亚洲高清人白洁 | 亚洲国产裸拍裸体视频在线观看乱了| 午夜激情久久久| 国产91精品精华液一区二区三区| 在线中文字幕一区| 久久精子c满五个校花| 一区二区三区蜜桃| 国产自产视频一区二区三区| 色综合久久综合网欧美综合网| 日韩三级伦理片妻子的秘密按摩| 国产精品高潮久久久久无| 免费欧美日韩国产三级电影| 99久久国产免费看| 久久综合狠狠综合久久综合88| 亚洲一区影音先锋| 成人美女视频在线观看| 日韩一区二区电影| 一二三四区精品视频| 国产成+人+日韩+欧美+亚洲| 欧美一卡在线观看| 一区二区三区精品| 成人毛片老司机大片| 欧美xxx久久| 婷婷成人综合网| 91国产丝袜在线播放| 国产日本一区二区| 久久爱www久久做| 69堂成人精品免费视频| 亚洲区小说区图片区qvod| 高清不卡一区二区| 久久亚洲一区二区三区明星换脸| 亚洲自拍偷拍图区| 91偷拍与自偷拍精品| 中文字幕国产精品一区二区| 久久99精品久久久久久久久久久久 | 亚洲国产成人va在线观看天堂| 成人性生交大片免费看在线播放 | 国产精品白丝在线| 国产精品自拍三区| 欧美v日韩v国产v| 久久99久久99小草精品免视看| 欧美精品九九99久久| 一区二区三区四区国产精品| 99精品黄色片免费大全| 国产精品久久久久天堂| 国产在线不卡一区| 久久先锋影音av| 精品亚洲成av人在线观看| 欧美一区二区私人影院日本| 亚洲大尺度视频在线观看| 在线观看中文字幕不卡| 亚洲一区二区三区激情| 欧美中文字幕一二三区视频| 一区二区三区久久| 日本高清不卡视频| 亚洲线精品一区二区三区| 欧美色爱综合网| 午夜欧美在线一二页| 91麻豆精品91久久久久同性| 三级在线观看一区二区| 日韩精品一区二区在线| 国产在线观看一区二区| 久久久久高清精品| 菠萝蜜视频在线观看一区| 成人欧美一区二区三区| 欧洲精品一区二区| 天堂av在线一区| 精品国产一区二区精华| 国产乱码字幕精品高清av | 日本韩国一区二区三区| 亚洲二区视频在线| 欧美一区二区三区不卡| 久久国内精品自在自线400部| 久久你懂得1024| 91视频观看免费| 亚洲成a人片在线观看中文| 日韩亚洲欧美在线观看| 国产精品小仙女| 一区二区三区自拍| 欧美一级艳片视频免费观看| 精品中文字幕一区二区小辣椒| 国产亚洲精品资源在线26u| 色综合色狠狠天天综合色| 午夜久久久久久电影| 国产三级久久久| 欧美性淫爽ww久久久久无| 九色综合国产一区二区三区|