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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? multiview.cpp

?? JMVM MPEG MVC/3DAV 測(cè)試平臺(tái) 國(guó)際通用標(biāo)準(zhǔn)
?? CPP
字號(hào):

#include<stdio.h>
#include<stdlib.h>

#include "Multiview.h"


H264AVC_NAMESPACE_BEGIN

static void ShowFrameInfo(ostream & outputStream, const char*const msg,
			  const RecPicBufUnit* const bufUnit) {
  outputStream << msg << " with frameNumber and poc (" 
	       << bufUnit->getFrameNum() 
	       << ", " << bufUnit->getPoc() << ") " << endl;
}


// ----------------------------------------------------------------------
//
// FUNCTION:	MultiviewReferenceInfo::MultiviewReferenceInfo
//
// INPUTS:	refDirection:  The reference direction to use 
//			       when adding the references.  FORWARD
//			       references are added to list0 for P/B
//			       frames while BACKWARD references are
//			       added to list 1 only for B frames.
//
//		fileParams: A YUVFileParams object describing the
//			    parameters of an existing file which will
//			    be used as a reference.
//
//		reader:	A valid ReadYuvFile object that has been
//			properly opened and is ready to read frames
//			from the stream to use as a reference.
//
// PURPOSE:	Collect and hold parameters for a multiview reference
//		stream.
//
//----------------------------------------------------------------------


MultiviewReferencePictureManager::MultiviewReferenceInfo::MultiviewReferenceInfo(
 const YUVFileParams& fileParams, ReadYuvFile*const reader) 
  : _fileParams(fileParams), 
    _fileReader(reader) {
}

MultiviewReferencePictureManager::MultiviewReferenceInfo::~MultiviewReferenceInfo() {
  _fileReader->uninit();
  _fileReader->destroy();

  while (! _referencePicsToRemove.empty()) {
    _referencePicsToRemove.back()->uninit();
    _referencePicsToRemove.back()->destroy();
    _referencePicsToRemove.pop_back();
  }
}

// ----------------------------------------------------------------------
//
// FUNCTION:	ReadMultiviewReferencePictureFromStreamIntoPicBuffer
//
// INPUTS:	reader: Pointer to a ReadYuvFile object that has
//			already been properly initialized.
//
//		fileParams: A properly initialized fileParams object
//			    containing appropriate buffer offsets.
//
//		pictureOrderCount: An integer specifying which frame
//				   number to read (starting from 0).
//
//		verbose: A flag indicating whether to print debug info.
//
// RETURNS:	A new'ly allocated PicBuffer object containing the
//		desired frame.  It is the caller's responsibility to
//		delete the PicBuffer when finished.
//
// PURPOSE:	Read a frame from a YUV file into a new PicBuffer.
//
// MODIFIED:	Tue Mar 14, 2006
//
// ----------------------------------------------------------------------


PicBuffer* ReadMultiviewReferencePictureFromStreamIntoPicBuffer
(ReadYuvFile* reader, const YUVFileParams& fileParams, 
 const int pictureOrderCount, const bool verbose) {

  if (verbose) 
    cout << "Going to read frame "<< pictureOrderCount <<" for multivew ref\n";

  UChar* buffer = new UChar[ fileParams._bufSize ];
  PicBuffer* newPicture = new PicBuffer(buffer);

  reader->GoToFrame(pictureOrderCount);
  if( ERR_CLASS::m_nOK != 
      reader->readFrame(buffer + fileParams._lumaOffset, 
			buffer + fileParams._cbOffset, 
			buffer + fileParams._crOffset,
			fileParams._height, fileParams._width, 
			fileParams._stride) ) {
    fprintf(stderr,"readFrame failed in %s:%i.\nAbort.\n",
	    __FILE__,__LINE__);
    fflush(stderr);
    fprintf(stdout,"readFrame failed in %s:%i.\nAbort.\n",
	    __FILE__,__LINE__);
    fflush(stdout);
    abort();
  }

  return newPicture;
}



MultiviewReferencePictureManager::MultiviewReferencePictureManager()
  :_verbose(true) {
}

MultiviewReferencePictureManager::~MultiviewReferencePictureManager() {

  while (! _references.empty() ) {
    delete _references.back();
    _references.pop_back();
  }

}

// ----------------------------------------------------------------------
//
// FUNCTION:	AddViewFileToUseAsReference
//
// INPUTS:	paramsForMultiviewReference:  A YUVFileParams object
//					      describing a multiview 
//					      reference file.
//
//		refDirection:  The reference direction to use 
//			       when adding the references.  FORWARD
//			       references are added to list0 for P/B
//			       frames while BACKWARD references are
//			       added to list 1 only for B frames.
//		
//
// PURPOSE:	Tell the MultiviewReferencePictureManager that it should
//		insert frames from the file specified in
//		paramsForMultiviewReference when the 
//		AddMultiviewReferencesPicturesToBuffer method is called.
//
//
// MODIFIED:	Tue Mar 14, 2006
//
// ----------------------------------------------------------------------


void MultiviewReferencePictureManager::AddViewFileToUseAsReference
(const YUVFileParams& paramsForMultiviewReference) {
  
  ReadYuvFile* newYUVReader;
  ReadYuvFile::create(newYUVReader);
  newYUVReader->init(paramsForMultiviewReference._fileName,
		     paramsForMultiviewReference._height, 
		     paramsForMultiviewReference._width, 0, 
		     paramsForMultiviewReference._width, 
		     ReadYuvFile::FILL_FRAME);


   _references.push_back(new MultiviewReferenceInfo
			(paramsForMultiviewReference,
			 newYUVReader));

}

// ----------------------------------------------------------------------
//
// FUNCTION:	AddVectorOfFilesToUseAsReference
//
// INPUTS:	vectorOfReferenceFiles:  A vector of YUVFileParams
//					 objects describing files to use
//					 as references in multiview coding.
//
//		refDirection:  The reference direction to use 
//			       when adding the references.  FORWARD
//			       references are added to list0 for P/B
//			       frames while BACKWARD references are
//			       added to list 1 only for B frames.
//		
// PURPOSE:	When you have a vector of YUVFileParams you can use this
//		function ot add the references all at once instead of
//		having to call AddViewFileToUseAsReference yourself for
//		each item in the vector.
//
// MODIFIED:	Wed Mar 15, 2006
//
// ----------------------------------------------------------------------


void MultiviewReferencePictureManager::AddVectorOfFilesToUseAsReference
(const vector<YUVFileParams>& vectorOfReferenceFiles) {
  
  UInt i;
  
  for (i=0; i < vectorOfReferenceFiles.size(); i++) 
    AddViewFileToUseAsReference(vectorOfReferenceFiles[i]);
}


// ----------------------------------------------------------------------
//
// FUNCTION:	AddMultiviewReferencesPicturesToBuffer
//
// INPUTS:	pcRecPicBuffer:  
//		pcSliceHeader:
//		rcOutputList:
//		rcUnusedList:
//		pcSPS: 
//
//		    The above are all parameters provided by the 
//		    PicEncoder object that we want to insert multiview
//		    references into.  At this point, I don't know much
//		    more about the arguments than that.
//
//		pictureOrderCount:  The frame number to insert.
//
// PURPOSE:	This method goes through each file that has been
//		registered via AddViewFileToUseAsReference, reads in
//		frame number pictureOrderCount, and inserts that into
//		the prediction buffer.
//
// MODIFIED:	Wed Mar 15, 2006
//
// ----------------------------------------------------------------------


void MultiviewReferencePictureManager::AddMultiviewReferencesPicturesToBuffer
(RecPicBuffer* pcRecPicBuffer,  SliceHeader* pcSliceHeader,
 PicBufferList& rcOutputList, PicBufferList& rcUnusedList, 
 const SequenceParameterSet & pcSPS, const int pictureOrderCount, const Bool IsAnchor) {

  UInt i,kk;

  if (_verbose) cout << endl << "Preparing to add multiview refs" << endl;

  for (i=0; i < _references.size(); i++) {

	  
	Bool used_for_ref =false;

	if (IsAnchor)	  
	{
		for ( kk=0; kk < pcSPS.SpsMVC->getNumAnchorRefsForListX(pcSliceHeader->getViewId(),0) ; kk++) // list0, anchor
			if ( _references[i]->_fileParams._view_id  == pcSPS.SpsMVC->getAnchorRefForListX(pcSliceHeader->getViewId(),kk,0) )
			{
				used_for_ref =true;
				_references[i]->_referenceDirection = FORWARD;		
			}
		for ( kk=0; kk < pcSPS.SpsMVC->getNumAnchorRefsForListX(pcSliceHeader->getViewId(),1) ; kk++) // list1, anchor
			if ( _references[i]->_fileParams._view_id  == pcSPS.SpsMVC->getAnchorRefForListX(pcSliceHeader->getViewId(),kk,1) )
			{
				used_for_ref =true;
				_references[i]->_referenceDirection = BACKWARD;		
			}
	}
	else
	{
		for ( kk=0; kk < pcSPS.SpsMVC->getNumNonAnchorRefsForListX(pcSliceHeader->getViewId(),0) ; kk++) // list0, non-anchor
			if ( _references[i]->_fileParams._view_id  == pcSPS.SpsMVC->getNonAnchorRefForListX(pcSliceHeader->getViewId(),kk,0) )
			{
				used_for_ref = true;
				_references[i]->_referenceDirection = FORWARD;		
			}
		for ( kk=0; kk < pcSPS.SpsMVC->getNumNonAnchorRefsForListX(pcSliceHeader->getViewId(),1) ; kk++) // list1, non-anchor
			if ( _references[i]->_fileParams._view_id  == pcSPS.SpsMVC->getNonAnchorRefForListX(pcSliceHeader->getViewId(),kk,1) )
			{
				used_for_ref = true;
				_references[i]->_referenceDirection = BACKWARD;		
			}
	}
	if (used_for_ref == false)
		continue;

    RecPicBufUnit* newRecPicBufUnit;
    
    PicBuffer* newPic=ReadMultiviewReferencePictureFromStreamIntoPicBuffer
      (_references[i]->_fileReader, _references[i]->_fileParams, 
       pictureOrderCount, _verbose);
    
    pcSliceHeader->setNalUnitType(NAL_UNIT_CODED_SLICE);
    pcSliceHeader->setNalRefIdc(NAL_REF_IDC_PRIORITY_LOW);
    pcSliceHeader->setInterViewRef(true);
    pcRecPicBuffer->initCurrRecPicBufUnit
      ( newRecPicBufUnit, newPic, pcSliceHeader, rcOutputList, rcUnusedList,
	_references[i]->_referenceDirection);
    
    pcRecPicBuffer->store( newRecPicBufUnit, pcSliceHeader, 
			   rcOutputList, rcUnusedList, 
			   _references[i]->_referenceDirection);
    
     assert( newRecPicBufUnit->isNeededForRef() );
    
     newRecPicBufUnit->setViewId(_references[i]->_fileParams._view_id);
     newRecPicBufUnit->getRecFrame()->setViewId(_references[i]->_fileParams._view_id);

    _references[i]->_referencePicsToRemove.push_back(newRecPicBufUnit);
    
    if (_verbose) ShowFrameInfo(cout,"Added frame", newRecPicBufUnit);
    
  }
}

int MultiviewReferencePictureManager::CountNumMultiviewReferenceStreams()const
{
  UInt count=0;

  while (count < _references.size()) {
    count++;
  }

  return count;
}

// ----------------------------------------------------------------------
//
// FUNCTION:	RemoveMultiviewReferencesPicturesFromBuffer
//
// PURPOSE:	Remove the multiview reference pictures we have
//		inserted.
//
// MODIFIED:	Wed Mar 15, 2006
//
// ----------------------------------------------------------------------


void MultiviewReferencePictureManager::RemoveMultiviewReferencesPicturesFromBuffer(RecPicBuffer* pcRecPicBuffer) {

  if (_verbose) cout << endl << "Preparing to remove multiview refs" << endl;

  for (UInt i=0; i < _references.size(); i++) {
    while (! _references[i]->_referencePicsToRemove.empty()) {
      RecPicBufUnit* unitToRemove = 
	_references[i]->_referencePicsToRemove.back();

      if (_verbose) ShowFrameInfo(cout,"going to remove frame",unitToRemove);

      assert( unitToRemove->isNeededForRef() );
      assert( unitToRemove->IsMultiviewReference() );
      unitToRemove->markNonRef();
      unitToRemove->markOutputted();
      pcRecPicBuffer->RemoveMultiviewRef(unitToRemove);
      _references[i]->_referencePicsToRemove.pop_back();
    }
  }
}

H264AVC_NAMESPACE_END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人夜色高潮福利影视| 欧美日韩国产在线观看| 国产精品久久免费看| www.综合网.com| 亚洲精品中文在线| 欧美在线播放高清精品| 婷婷综合久久一区二区三区| 日韩一级黄色片| 国产成人亚洲精品青草天美| 亚洲美女少妇撒尿| 欧美日韩国产成人在线免费| 久久国产精品色婷婷| 欧美国产日产图区| 欧美性感一类影片在线播放| 奇米888四色在线精品| 欧美精品一区二区三区很污很色的| 国产成人在线色| 玉足女爽爽91| 日韩欧美国产电影| 菠萝蜜视频在线观看一区| 亚洲制服丝袜一区| 精品日韩一区二区三区免费视频| 成人中文字幕合集| 亚洲综合成人在线视频| 日韩精品中文字幕一区二区三区 | 久久91精品国产91久久小草| 国产午夜久久久久| 欧美亚洲日本一区| 激情综合五月婷婷| 亚洲激情图片一区| 精品日产卡一卡二卡麻豆| 成人av免费观看| 日本女人一区二区三区| 国产精品素人一区二区| 欧美日韩国产一二三| 国产盗摄精品一区二区三区在线| 一区二区欧美国产| 国产三级欧美三级日产三级99| 色成人在线视频| 激情久久五月天| 一区二区三区资源| 国产视频亚洲色图| 91精品在线免费观看| 成人性色生活片| 青青青爽久久午夜综合久久午夜| 国产精品乱人伦| 欧美成人高清电影在线| 色婷婷久久久亚洲一区二区三区| 久久99日本精品| 亚洲影院免费观看| 久久精品日产第一区二区三区高清版| 欧美三电影在线| 豆国产96在线|亚洲| 蜜臀av一区二区| 亚洲综合在线五月| 国产精品色噜噜| 欧美va亚洲va国产综合| 欧美三区免费完整视频在线观看| 高清不卡在线观看av| 日本欧美久久久久免费播放网| 亚洲视频香蕉人妖| 欧美精品一区二区三区在线播放| 欧美日韩免费电影| 9久草视频在线视频精品| 久久se这里有精品| 视频一区中文字幕国产| 亚洲欧美视频在线观看| 国产亚洲欧美日韩在线一区| 91精品欧美一区二区三区综合在| 91麻豆免费视频| 国产成人在线视频播放| 麻豆精品视频在线观看| 天天操天天干天天综合网| 亚洲天堂福利av| 欧美国产日韩一二三区| 久久亚洲影视婷婷| 日韩欧美国产小视频| 欧美日韩二区三区| 色狠狠综合天天综合综合| 大陆成人av片| 国产一区二区三区四区五区入口 | 精品国产第一区二区三区观看体验| 欧美视频在线观看一区| 色综合中文综合网| 国产精品影视天天线| 日韩va欧美va亚洲va久久| 玉米视频成人免费看| 国产精品欧美精品| 国产欧美一区二区精品婷婷| 精品国产91乱码一区二区三区| 欧美一区二区在线视频| 91麻豆精品国产| 91 com成人网| 欧美丰满嫩嫩电影| 欧美日韩一区二区电影| 欧美日精品一区视频| 欧美性极品少妇| 欧美三级日本三级少妇99| 欧美丝袜丝nylons| 欧美日韩一区视频| 欧美日韩小视频| 欧美日韩另类一区| 欧美视频在线观看一区二区| 欧美三区免费完整视频在线观看| 欧美影院午夜播放| 欧美色电影在线| 欧美精品在线观看播放| 91精品国产91综合久久蜜臀| 91精品啪在线观看国产60岁| 日韩一级完整毛片| 欧美xxxx老人做受| 26uuu精品一区二区| 国产亚洲一区字幕| 国产欧美日韩一区二区三区在线观看| 久久久久久免费网| 亚洲国产精品黑人久久久| 国产精品美女久久久久久2018| 国产精品私人影院| 亚洲精选一二三| 午夜精品久久久久久久99樱桃| 日韩精品五月天| 看国产成人h片视频| 裸体歌舞表演一区二区| 国产在线国偷精品产拍免费yy| 国产福利一区在线观看| 成人激情视频网站| 在线一区二区视频| 欧美午夜精品一区二区蜜桃| 欧美疯狂性受xxxxx喷水图片| 欧美电影精品一区二区| 久久久亚洲欧洲日产国码αv| 欧美经典一区二区| 亚洲美女视频在线观看| 午夜精品视频一区| 国产在线一区观看| 波多野结衣在线aⅴ中文字幕不卡| 在线观看欧美日本| 欧美一区二区三区不卡| 久久久精品综合| 一区二区三区小说| 日本强好片久久久久久aaa| 国产毛片精品视频| 99视频在线精品| 欧美另类久久久品| 久久综合狠狠综合久久激情| 国产精品欧美经典| 天堂一区二区在线免费观看| 国产中文字幕精品| 色乱码一区二区三区88| 日韩精品一区二区三区中文精品| 国产欧美一区在线| 午夜婷婷国产麻豆精品| 国产乱码精品一品二品| 91天堂素人约啪| 欧美一区二区三区日韩| 国产精品无遮挡| 亚洲h动漫在线| 国产成人一区二区精品非洲| 欧美图区在线视频| 久久综合999| 一级特黄大欧美久久久| 狠狠色丁香九九婷婷综合五月 | 99久久综合色| 欧美老女人在线| 欧美激情综合五月色丁香| 亚洲第一综合色| 国产麻豆视频精品| 欧美亚洲国产一区二区三区va| 欧美成人精品1314www| 亚洲男人的天堂av| 国内久久婷婷综合| 欧美性色黄大片手机版| 欧美精品一区在线观看| 亚洲一区免费视频| 丁香六月综合激情| 日韩欧美一区二区三区在线| 中文字幕在线观看不卡视频| 麻豆91精品视频| 色吧成人激情小说| 亚洲精品一区二区三区精华液 | 日韩成人一区二区| 972aa.com艺术欧美| 精品国产污污免费网站入口 | 国产精品亚洲а∨天堂免在线| 欧美自拍偷拍一区| 国产亚洲精品超碰| 欧美aa在线视频| 一本久久a久久免费精品不卡| www精品美女久久久tv| 亚洲一区电影777| 成人av在线一区二区三区| 日韩美女视频一区二区在线观看| 悠悠色在线精品| 国产91在线|亚洲| 日韩三区在线观看| 亚洲国产精品麻豆| 不卡视频在线看| 国产三级一区二区| 久久成人免费网| 欧美一卡在线观看|