⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiview.h

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 H
字号:

#ifndef INCLUDE_MULTIVIEW_DOT_H
#define INCLUDE_MULTIVIEW_DOT_H

// If max and min are defined by the preprocessor, STL stuff breaks so
// undefine them.
//#undef max
//#undef min
#include <vector>
#include <string>

#include "H264AVCVideoIoLib.h"
#include "H264AVCEncoderLib.h"
#include "H264AVCCommonLib.h"
#include "RecPicBuffer.h"
#include "SliceEncoder.h"
#include "ReadYuvFile.h"
#include "ReadBitstreamFile.h"
#include "WriteBitstreamToFile.h"
#include "YUVFileParams.h"
#include "RecPicBuffer.h"

using namespace std;

H264AVC_NAMESPACE_BEGIN


// Note, enum MultiviewReferenceDirection is defined in RecPicBuffer.h


// ----------------------------------------------------------------------
//
// CLASS:	MultiviewReferencePictureManager
//
// PURPOSE:	This is the main class that manages inserting/deleting
//		multiview references from the decoded picture buffer.  
//		First, you initialize a MultiviewReferencePictureManager 
//		by telling it which files you want to use for reference
//		using the AddViewFileToUseAsReference member function,
//		or the AddVectorOfFileFilesToUseAsReference member
//		function, and then inside the coding loop, you call
//		AddMultiviewReferencesPicturesToBuffer before coding
//		and call RemoveMultiviewReferencesPicturesFromBuffer
//		after coding.
//
// MODIFIED:	Tue Mar 14, 2006
//
// ----------------------------------------------------------------------

class MultiviewReferencePictureManager {
  class MultiviewReferenceInfo; // helper class (see below for details)
public:
  MultiviewReferencePictureManager();

  ~MultiviewReferencePictureManager();

  
  void AddViewFileToUseAsReference
  (const YUVFileParams& paramsForMultiviewReference);

  void AddVectorOfFilesToUseAsReference
  (const vector<YUVFileParams>& vectorOfReferenceFiles);
  
  void AddMultiviewReferencesPicturesToBuffer
  (RecPicBuffer* m_pcRecPicBuffer, SliceHeader* pcSliceHeader,
   PicBufferList& rcOutputList, PicBufferList& rcUnusedList, 
   const SequenceParameterSet & pcSPS, const int pictureOrderCount, const Bool IsAnchor);

  void RemoveMultiviewReferencesPicturesFromBuffer
  (RecPicBuffer* m_pcRecPicBuffer);

  int CountNumMultiviewReferenceStreams() const;

  bool                               _verbose;
protected:
  // The _references field contains a MultiviewReferenceInfo object
  // for each reference stream.  These tell the 
  // MultiviewReferencePictureManager what multiview references to
  // insert when AddMultiviewReferencesPicturesToBuffer is called.

  vector<MultiviewReferenceInfo*>    _references;

private:
  MultiviewReferencePictureManager
  (const MultiviewReferencePictureManager& other) {
    abort(); // copying not implemented yet
  }
};


// ----------------------------------------------------------------------
//
// CLASS:	MultiviewReferencePictureManager::MultiviewReferenceInfo
//
// PURPOSE:	This class is designed to collect together and hold 
//		the parameters for a multiview reference stream.  It
//		is internal to MultiviewReferencePictureManager and
//		probably does not need to be used outside of it.
//
// ----------------------------------------------------------------------

class MultiviewReferencePictureManager::MultiviewReferenceInfo {
public:
  
  MultiviewReferenceInfo
  (const YUVFileParams& fileParams, ReadYuvFile*const reader);
  
  ~MultiviewReferenceInfo();


public:
  MultiviewReferenceDirection _referenceDirection;
  YUVFileParams               _fileParams;
  ReadYuvFile*                _fileReader;
  vector<RecPicBufUnit*>      _referencePicsToRemove;
  
};


H264AVC_NAMESPACE_END

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -