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

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

?? mp4file.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
字號:
/***************************************************************************    copyright            : (C) 2002, 2003, 2006 by Jochen Issing    email                : jochen.issing@isign-softart.de ***************************************************************************//*************************************************************************** *   This library is free software; you can redistribute it and/or modify  * *   it  under the terms of the GNU Lesser General Public License version  * *   2.1 as published by the Free Software Foundation.                     * *                                                                         * *   This library 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     * *   Lesser General Public License for more details.                       * *                                                                         * *   You should have received a copy of the GNU Lesser General Public      * *   License along with this library; if not, write to the Free Software   * *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,            * *   MA  02110-1301  USA                                                   * ***************************************************************************/#include <tbytevector.h>#include <tstring.h>#include "tlist.h"#include "mp4itunestag.h"#include "mp4file.h"#include "boxfactory.h"#include "mp4tagsproxy.h"#include "mp4propsproxy.h"#include "mp4audioproperties.h"#include "itunesdatabox.h"using namespace TagLib;class MP4::File::FilePrivate{public:  //! list for all boxes of the mp4 file  TagLib::List<MP4::Mp4IsoBox*> boxes;  //! the box factory - will create all boxes by tag and size  MP4::BoxFactory             boxfactory;  //! proxy for the tags is filled after parsing  MP4::Mp4TagsProxy           tagsProxy;  //! proxy for audio properties  MP4::Mp4PropsProxy          propsProxy;  //! the tag returned by tag() function  MP4::Tag                    mp4tag;  //! container for the audio properties returned by properties() function  MP4::AudioProperties        mp4audioproperties;  //! is set to valid after successfully parsing  bool                        isValid;};//! function to fill the tags with converted proxy data, which has been parsed out of the file previouslystatic void fillTagFromProxy( MP4::Mp4TagsProxy& proxy, MP4::Tag& mp4tag );MP4::File::File(const char *file, bool , AudioProperties::ReadStyle  )	:TagLib::File( file ){  // create member container  d = new MP4::File::FilePrivate();  d->isValid = false;  TagLib::uint size;  MP4::Fourcc  fourcc;  while( readSizeAndType( size, fourcc ) == true )  {    // create the appropriate subclass and parse it    MP4::Mp4IsoBox* curbox = d->boxfactory.createInstance( this, fourcc, size, tell() );    curbox->parsebox();    d->boxes.append( curbox );  }  for( TagLib::List<MP4::Mp4IsoBox*>::Iterator iter  = d->boxes.begin();                                               iter != d->boxes.end();					       iter++ )  {    if( (*iter)->fourcc() == MP4::Fourcc("moov") )    {      d->isValid = true;      break;    }  }     //if( d->isValid )    //debug( "file is valid" );  //else    //debug( "file is NOT valid" );  // fill tags from proxy data  fillTagFromProxy( d->tagsProxy, d->mp4tag );}MP4::File::~File(){  TagLib::List<Mp4IsoBox*>::Iterator delIter;  for( delIter  = d->boxes.begin();       delIter != d->boxes.end();       delIter++ )  {    delete *delIter;  }  delete d;}Tag *MP4::File::tag() const{  return &d->mp4tag;}AudioProperties * MP4::File::audioProperties() const{  d->mp4audioproperties.setProxy( &d->propsProxy );  return &d->mp4audioproperties;}bool MP4::File::save(){  return false;}void MP4::File::remove(){}TagLib::uint MP4::File::readSystemsLen(){  TagLib::uint length = 0;  TagLib::uint nbytes = 0;  ByteVector   input;  TagLib::uchar tmp_input;  do  {    input = readBlock(1);    tmp_input = static_cast<TagLib::uchar>(input[0]);    nbytes++;    length = (length<<7) | (tmp_input&0x7F);  } while( (tmp_input&0x80) && (nbytes<4) );  return length;}bool MP4::File::readSizeAndType( TagLib::uint& size, MP4::Fourcc& fourcc ){  // read the two blocks from file  ByteVector readsize = readBlock(4);  ByteVector readtype = readBlock(4);  if( (readsize.size() != 4) || (readtype.size() != 4) )    return false;  // set size  size = static_cast<unsigned char>(readsize[0]) << 24 |          static_cast<unsigned char>(readsize[1]) << 16 |         static_cast<unsigned char>(readsize[2]) <<  8 |         static_cast<unsigned char>(readsize[3]);  // type and size seem to be part of the stored size  if( size < 8 )    return false;  // set fourcc  fourcc = readtype.data();  return true;}bool MP4::File::readInt( TagLib::uint& toRead ){  ByteVector readbuffer = readBlock(4);  if( readbuffer.size() != 4 )    return false;  toRead = static_cast<unsigned char>(readbuffer[0]) << 24 |            static_cast<unsigned char>(readbuffer[1]) << 16 |           static_cast<unsigned char>(readbuffer[2]) <<  8 |           static_cast<unsigned char>(readbuffer[3]);  return true;}bool MP4::File::readShort( TagLib::uint& toRead ){  ByteVector readbuffer = readBlock(2);  if( readbuffer.size() != 2 )    return false;  toRead = static_cast<unsigned char>(readbuffer[0]) <<  8 |           static_cast<unsigned char>(readbuffer[1]);  return true;}bool MP4::File::readLongLong( TagLib::ulonglong& toRead ){  ByteVector readbuffer = readBlock(8);  if( readbuffer.size() != 8 )    return false;  toRead = static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[0])) << 56 |            static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[1])) << 48 |           static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[2])) << 40 |           static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[3])) << 32 |           static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[4])) << 24 |            static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[5])) << 16 |           static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[6])) <<  8 |           static_cast<ulonglong>(static_cast<unsigned char>(readbuffer[7]));  return true;}bool MP4::File::readFourcc( TagLib::MP4::Fourcc& fourcc ){  ByteVector readtype = readBlock(4);  if( readtype.size() != 4)    return false;  // set fourcc  fourcc = readtype.data();  return true;}MP4::Mp4TagsProxy* MP4::File::tagProxy() const{  return &d->tagsProxy;}MP4::Mp4PropsProxy* MP4::File::propProxy() const{  return &d->propsProxy;}void fillTagFromProxy( MP4::Mp4TagsProxy& proxy, MP4::Tag& mp4tag ){  // tmp buffer for each tag  MP4::ITunesDataBox* databox;    databox = proxy.titleData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setTitle( datastring );  }  databox = proxy.artistData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setArtist( datastring );  }  databox = proxy.albumData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setAlbum( datastring );  }  databox = proxy.genreData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setGenre( datastring );  }  databox = proxy.yearData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setYear( datastring.toInt() );  }  databox = proxy.trknData();  if( databox != 0 )  {    // convert data to uint    TagLib::ByteVector datavec = databox->data();    if( datavec.size() >= 4 )    {      TagLib::uint trackno = static_cast<TagLib::uint>( static_cast<unsigned char>(datavec[0]) << 24 |	                                                static_cast<unsigned char>(datavec[1]) << 16 |	                                                static_cast<unsigned char>(datavec[2]) <<  8 |	                                                static_cast<unsigned char>(datavec[3]) );      mp4tag.setTrack( trackno );    }    else      mp4tag.setTrack( 0 );  }  databox = proxy.commentData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setComment( datastring );  }  databox = proxy.groupingData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setGrouping( datastring );  }  databox = proxy.composerData();  if( databox != 0 )  {    // convert data to string    TagLib::String datastring( databox->data(), String::UTF8 );    // check if string was set    if( !datastring.isEmpty() )      mp4tag.setComposer( datastring );  }  databox = proxy.diskData();  if( databox != 0 )  {    // convert data to uint    TagLib::ByteVector datavec = databox->data();    if( datavec.size() >= 4 )    {      TagLib::uint discno = static_cast<TagLib::uint>( static_cast<unsigned char>(datavec[0]) << 24 |	                                               static_cast<unsigned char>(datavec[1]) << 16 |	                                               static_cast<unsigned char>(datavec[2]) <<  8 |	                                               static_cast<unsigned char>(datavec[3]) );      mp4tag.setDisk( discno );    }    else      mp4tag.setDisk( 0 );  }  databox = proxy.bpmData();  if( databox != 0 )  {    // convert data to uint    TagLib::ByteVector datavec = databox->data();    if( datavec.size() >= 2 )    {      TagLib::uint bpm = static_cast<TagLib::uint>( static_cast<unsigned char>(datavec[0]) <<  8 |	                                            static_cast<unsigned char>(datavec[1]) );      mp4tag.setBpm( bpm );    }    else      mp4tag.setBpm( 0 );  }  databox = proxy.coverData();  if( databox != 0 )  {    // get byte vector    mp4tag.setCover( databox->data() );  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情动漫在线观看| 99久久精品国产一区| aaa亚洲精品| 在线亚洲高清视频| 久久久国际精品| 丝袜脚交一区二区| 99re66热这里只有精品3直播 | 久久精品日产第一区二区三区高清版 | 视频在线观看一区二区三区| 成人app网站| 91福利视频在线| 国产精品萝li| 精品一区二区三区在线观看国产 | 亚洲电影中文字幕在线观看| 成人免费毛片嘿嘿连载视频| 欧美精品v国产精品v日韩精品| 国产精品久久久久久久久动漫| 国内精品免费在线观看| 日韩网站在线看片你懂的| 一区二区三区蜜桃网| 波多野结衣一区二区三区| 久久嫩草精品久久久精品一| 另类的小说在线视频另类成人小视频在线 | 亚洲国产cao| 91国偷自产一区二区三区成为亚洲经典| 国产欧美精品国产国产专区| 精品亚洲porn| 精品国产精品一区二区夜夜嗨| 午夜精品视频一区| 欧美高清视频在线高清观看mv色露露十八 | 国产盗摄女厕一区二区三区| 2020日本不卡一区二区视频| 国产在线不卡一区| 欧美国产一区二区| 99久久精品久久久久久清纯| 亚洲欧美激情在线| 色激情天天射综合网| 亚洲精品久久久蜜桃| 欧美视频第二页| 亚洲一区二区三区四区在线观看 | 暴力调教一区二区三区| 久久久久久久久久久黄色| 国产一区二三区| 国产欧美视频在线观看| 成人免费黄色在线| 亚洲三级在线免费| 欧美自拍偷拍午夜视频| 日本不卡1234视频| 国产欧美一二三区| 91美女在线看| 亚洲电影你懂得| 欧美xxxx老人做受| 99久久综合色| 午夜影院久久久| 久久综合九色综合欧美98| 成人福利在线看| 亚洲国产欧美在线| 日韩三级av在线播放| 懂色av一区二区三区蜜臀| 亚洲男人的天堂网| 欧美zozo另类异族| 91视频观看免费| 午夜精品久久久| 国产女人18毛片水真多成人如厕| 在线中文字幕不卡| 久久99精品久久久| 亚洲一区二区在线免费观看视频| 日韩欧美电影一二三| fc2成人免费人成在线观看播放| 亚洲va欧美va人人爽午夜| 2023国产精华国产精品| 91久久精品一区二区二区| 激情欧美一区二区三区在线观看| 亚洲欧美日韩国产综合在线| 日韩一区二区免费视频| 91丝袜呻吟高潮美腿白嫩在线观看| 婷婷久久综合九色综合绿巨人 | 久久―日本道色综合久久| 色噜噜狠狠一区二区三区果冻| 免费看欧美女人艹b| 136国产福利精品导航| 日韩免费高清视频| 欧美视频完全免费看| jlzzjlzz亚洲日本少妇| 国内一区二区视频| 日本成人超碰在线观看| 亚洲精品视频在线观看网站| 久久久久久久久伊人| 欧美一区二区不卡视频| 色婷婷久久99综合精品jk白丝 | 麻豆一区二区在线| 亚洲国产精品人人做人人爽| 国产精品国产自产拍在线| 精品对白一区国产伦| 欧美电影一区二区| 色综合久久88色综合天天免费| 国产在线一区观看| 免费看精品久久片| 视频一区欧美精品| 亚洲成年人网站在线观看| 亚洲精品欧美专区| 一区二区中文字幕在线| 国产免费成人在线视频| 久久视频一区二区| 欧美大片一区二区| 91精品国产欧美日韩| 欧美日韩久久久久久| 91国偷自产一区二区三区观看 | 亚洲欧美另类在线| 国产精品人成在线观看免费| 国产人成亚洲第一网站在线播放| www国产精品av| 欧美精品一区二区三区很污很色的| 91精品国产91久久久久久一区二区| 在线看国产日韩| 91久久精品一区二区三区| 日本韩国一区二区三区视频| 欧美自拍偷拍一区| 欧美日韩高清一区二区不卡 | 久久精品夜色噜噜亚洲aⅴ| 欧美xxx久久| 久久九九久久九九| 日本一区二区免费在线观看视频 | 欧美最猛性xxxxx直播| 欧美在线小视频| 91精品在线一区二区| 欧美一区午夜精品| 久久蜜桃av一区二区天堂| 国产欧美日韩精品a在线观看| 亚洲欧美综合另类在线卡通| 亚洲女同ⅹxx女同tv| 亚洲第一在线综合网站| 麻豆久久久久久| 国产成人在线电影| 一本大道久久a久久综合婷婷| 91福利国产成人精品照片| 日韩一卡二卡三卡| 久久精品视频网| 亚洲一区二区三区精品在线| 免费成人在线视频观看| 成人丝袜视频网| 欧美中文字幕不卡| 日韩精品一区二区三区在线观看| 久久久精品综合| 亚洲综合视频网| 蜜桃精品在线观看| 99精品久久免费看蜜臀剧情介绍| 欧美视频在线一区二区三区 | 国产精品12区| 色先锋aa成人| 2024国产精品视频| 亚洲精品日韩一| 精品一二三四区| 在线观看日韩毛片| 精品av久久707| 亚洲国产综合91精品麻豆| 国产精品一区二区91| 欧美精品一二三区| 中文字幕精品三区| 日韩精品一级二级| 99vv1com这只有精品| 欧美大片在线观看一区二区| 一区二区在线观看视频在线观看| 久久精品国产精品亚洲综合| 色婷婷av一区二区三区大白胸| 精品欧美乱码久久久久久| 亚洲自拍都市欧美小说| 成人午夜激情片| 亚洲精品在线观看视频| 亚洲国产日韩a在线播放| 成年人国产精品| 久久综合色综合88| 丝袜亚洲另类欧美综合| 日本福利一区二区| 白白色 亚洲乱淫| 91麻豆精品在线观看| 2024国产精品视频| 日本少妇一区二区| 欧美综合一区二区三区| 亚洲欧美怡红院| www.欧美.com| 国产日产欧美一区| 精品一区二区三区久久| 欧美一级生活片| 日日骚欧美日韩| 欧美日韩另类国产亚洲欧美一级| 亚洲精品视频在线观看免费| 99国产欧美另类久久久精品| 中文字幕不卡的av| 国产精品一区二区x88av| 精品福利av导航| 国产一区二区三区四区五区美女| 69久久夜色精品国产69蝌蚪网| 一个色在线综合| 91老师片黄在线观看| 亚洲乱码国产乱码精品精98午夜 | 蜜臀国产一区二区三区在线播放| 精品视频在线免费观看| 性做久久久久久久久| 欧美日韩另类一区|