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

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

?? amr_pin.cpp

?? MONOGRAM AMR Splitter v0.9.0.1
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
//
//	AMR Demuxer
//
//	Author : Igor Janos
//
//-----------------------------------------------------------------------------
#include "stdafx.h"


//-----------------------------------------------------------------------------
//
//	CAMRInputPin class
//
//-----------------------------------------------------------------------------

CAMRInputPin::CAMRInputPin(TCHAR *pObjectName, CAMRDemux *pDemux, HRESULT *phr, LPCWSTR pName) :
	CBaseInputPin(pObjectName, pDemux, &pDemux->lock_filter, phr, pName),
	reader(NULL)
{
	// assign the splitter filter
	demux = pDemux;
}

CAMRInputPin::~CAMRInputPin()
{
	if (reader) { reader->Release(); reader = NULL; }
}

// this is a pull mode pin - these can not happen

STDMETHODIMP CAMRInputPin::EndOfStream()		{ return E_UNEXPECTED; }
STDMETHODIMP CAMRInputPin::BeginFlush()			{ return E_UNEXPECTED; }
STDMETHODIMP CAMRInputPin::EndFlush()			{ return E_UNEXPECTED; }
STDMETHODIMP CAMRInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double rate)	{ return E_UNEXPECTED; }

// we don't support this kind of transport
STDMETHODIMP CAMRInputPin::Receive(IMediaSample * pSample) { return E_UNEXPECTED; }

// check for input type
HRESULT CAMRInputPin::CheckConnect(IPin *pPin)
{
	HRESULT hr = demux->CheckConnect(PINDIR_INPUT, pPin);
	if (FAILED(hr)) return hr;

	return CBaseInputPin::CheckConnect(pPin);
}

HRESULT CAMRInputPin::BreakConnect()
{
	// Can't disconnect unless stopped
	ASSERT(IsStopped());

	demux->BreakConnect(PINDIR_INPUT, this);

	// release the reader
	if (reader) reader->Release(); reader = NULL;
	return CBaseInputPin::BreakConnect();
}

HRESULT CAMRInputPin::CompleteConnect(IPin *pReceivePin)
{
	// make sure there is a pin
	ASSERT(pReceivePin);

	if (reader) reader->Release(); reader = NULL;

	// and make sure it supports IAsyncReader
	HRESULT hr = pReceivePin->QueryInterface(IID_IAsyncReader, (void **)&reader);
	if (FAILED(hr)) return hr;

	// we're done here
	hr = demux->CompleteConnect(PINDIR_INPUT, this, pReceivePin);
	if (FAILED(hr)) return hr;

	return CBaseInputPin::CompleteConnect(pReceivePin);
}

HRESULT CAMRInputPin::CheckMediaType(const CMediaType* pmt)
{
	// make sure we have a type
	ASSERT(pmt);

	// ask the splitter
	return demux->CheckInputType(pmt);
}

HRESULT CAMRInputPin::SetMediaType(const CMediaType* pmt)
{
	// let the baseclass know
	if (FAILED(CheckMediaType(pmt))) return E_FAIL;

	HRESULT hr = CBasePin::SetMediaType(pmt);
	if (FAILED(hr)) return hr;

	return NOERROR;
}

HRESULT CAMRInputPin::Inactive()
{
	HRESULT hr = CBaseInputPin::Inactive();
	if (hr == VFW_E_NO_ALLOCATOR) hr = NOERROR;
	if (FAILED(hr)) return hr;

	return hr;
}

//-----------------------------------------------------------------------------
//
//	CAMROutputPin class
//
//-----------------------------------------------------------------------------

CAMROutputPin::CAMROutputPin(TCHAR *pObjectName, CAMRDemux *pDemux, HRESULT *phr, LPCWSTR pName, int iBuffers) :
	CBaseOutputPin(pObjectName, pDemux, &pDemux->lock_filter, phr, pName),
	CAMThread(),
	demux(pDemux),
	buffers(iBuffers),
	active(false),
	rtStart(0),
	rtStop(0xffffffffffff),
	rate(1.0),
	ev_can_read(TRUE),
	ev_can_write(TRUE),
	ev_abort(TRUE)
{
	discontinuity = true;
	eos_delivered = false;

	ev_can_read.Reset();
	ev_can_write.Set();
	ev_abort.Reset();

	// up to 5 seconds
	buffer_time_ms = 5000;
}

CAMROutputPin::~CAMROutputPin()
{
	// nothing yet
}

STDMETHODIMP CAMROutputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
	CheckPointer(ppv, E_POINTER);
	if (riid == IID_IMediaSeeking) {
		return GetInterface((IMediaSeeking*)this, ppv);
	} else {
		return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv);
	}
}

HRESULT CAMROutputPin::CheckMediaType(const CMediaType *mtOut)
{
	for (int i=0; i<mt_types.GetCount(); i++) {
		if (mt_types[i] == *mtOut) return NOERROR;
	}

	// reject type if it's not among ours
	return E_FAIL;
}

HRESULT CAMROutputPin::SetMediaType(const CMediaType *pmt)
{
	// just set internal media type
	if (FAILED(CheckMediaType(pmt))) return E_FAIL;
	return CBaseOutputPin::SetMediaType(pmt);
}

HRESULT CAMROutputPin::GetMediaType(int iPosition, CMediaType *pmt)
{
	// enumerate the list
	if (iPosition < 0) return E_INVALIDARG;
	if (iPosition >= mt_types.GetCount()) return VFW_S_NO_MORE_ITEMS;

	*pmt = mt_types[iPosition];
	return NOERROR;
}

HRESULT CAMROutputPin::DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp)
{
	ASSERT(pAlloc);
	ASSERT(pProp);
	HRESULT hr = NOERROR;

	pProp->cBuffers = max(buffers, 1);
	pProp->cbBuffer = max(m_mt.lSampleSize, 1);
	ALLOCATOR_PROPERTIES	Actual;
	hr = pAlloc->SetProperties(pProp, &Actual);
	if (FAILED(hr)) return hr;

	ASSERT(Actual.cBuffers >= pProp->cBuffers);
	return NOERROR;
}

HRESULT CAMROutputPin::BreakConnect()
{
	ASSERT(IsStopped());
	demux->BreakConnect(PINDIR_OUTPUT, this);
	discontinuity = true;
	return CBaseOutputPin::BreakConnect();
}

HRESULT CAMROutputPin::CompleteConnect(IPin *pReceivePin)
{
	// let the parent know
	HRESULT hr = demux->CompleteConnect(PINDIR_OUTPUT, this, pReceivePin);
	if (FAILED(hr)) return hr;

	discontinuity = true;
	// okey
	return CBaseOutputPin::CompleteConnect(pReceivePin);
}

STDMETHODIMP CAMROutputPin::Notify(IBaseFilter *pSender, Quality q)
{
	return S_FALSE;
}

HRESULT CAMROutputPin::Inactive()
{
	if (!active) return NOERROR;
	active = FALSE;

	// destroy everything
	ev_abort.Set();
	HRESULT hr = CBaseOutputPin::Inactive();
	ASSERT(SUCCEEDED(hr));

	if (ThreadExists()) {
		CallWorker(CMD_EXIT);
		Close();
	}
	FlushQueue();
	ev_abort.Reset();

	return NOERROR;
}


HRESULT CAMROutputPin::Active()
{
	if (active) return NOERROR;
	
	FlushQueue();
	if (!IsConnected()) return VFW_E_NOT_CONNECTED;

	ev_abort.Reset();

	HRESULT hr = CBaseOutputPin::Active();
	if (FAILED(hr)) {
		active = FALSE;
		return hr;
	}

	// new segment
	DoNewSegment(rtStart, rtStop, rate);

	// vytvorime novu queue
	if (!ThreadExists()) {
		Create();
		CallWorker(CMD_RUN);
	}

	active = TRUE;
	return hr;
}


HRESULT CAMROutputPin::DoNewSegment(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, double dRate)
{
	// queue the EOS packet
	this->rtStart = rtStart;
	this->rtStop = rtStop;
	this->rate = dRate;
	eos_delivered = false;

	if (1) {
		discontinuity = true;
		return DeliverNewSegment(rtStart, rtStop, rate);
	} else {
		DataPacket	*packet = new DataPacket();
		{
			CAutoLock	lck(&lock_queue);
			packet->type = DataPacket::PACKET_TYPE_NEW_SEGMENT;
			packet->rtStart = rtStart;
			packet->rtStop = rtStop;
			packet->rate = rate;
			queue.AddTail(packet);
			ev_can_read.Set();
			discontinuity = true;
		}
	}
	return NOERROR;
}

// IMediaSeeking
STDMETHODIMP CAMROutputPin::GetCapabilities(DWORD* pCapabilities)					{ return demux->GetCapabilities(pCapabilities); }
STDMETHODIMP CAMROutputPin::CheckCapabilities(DWORD* pCapabilities)					{ return demux->CheckCapabilities(pCapabilities); }
STDMETHODIMP CAMROutputPin::IsFormatSupported(const GUID* pFormat)					{ return demux->IsFormatSupported(pFormat); }
STDMETHODIMP CAMROutputPin::QueryPreferredFormat(GUID* pFormat)						{ return demux->QueryPreferredFormat(pFormat); }
STDMETHODIMP CAMROutputPin::GetTimeFormat(GUID* pFormat)							{ return demux->GetTimeFormat(pFormat); }
STDMETHODIMP CAMROutputPin::IsUsingTimeFormat(const GUID* pFormat)					{ return demux->IsUsingTimeFormat(pFormat); }
STDMETHODIMP CAMROutputPin::SetTimeFormat(const GUID* pFormat)						{ return demux->SetTimeFormat(pFormat); }
STDMETHODIMP CAMROutputPin::GetDuration(LONGLONG* pDuration)						{ return demux->GetDuration(pDuration); }
STDMETHODIMP CAMROutputPin::GetStopPosition(LONGLONG* pStop)						{ return demux->GetStopPosition(pStop); }
STDMETHODIMP CAMROutputPin::GetCurrentPosition(LONGLONG* pCurrent)					{ return demux->GetCurrentPosition(pCurrent); }
STDMETHODIMP CAMROutputPin::GetPositions(LONGLONG* pCurrent, LONGLONG* pStop)		{ return demux->GetPositions(pCurrent, pStop); }
STDMETHODIMP CAMROutputPin::GetAvailable(LONGLONG* pEarliest, LONGLONG* pLatest)	{ return demux->GetAvailable(pEarliest, pLatest); }
STDMETHODIMP CAMROutputPin::SetRate(double dRate)									{ return demux->SetRate(dRate); }
STDMETHODIMP CAMROutputPin::GetRate(double* pdRate)									{ return demux->GetRate(pdRate); }
STDMETHODIMP CAMROutputPin::GetPreroll(LONGLONG* pllPreroll)						{ return demux->GetPreroll(pllPreroll); }
STDMETHODIMP CAMROutputPin::ConvertTimeFormat(LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat)
{
	return demux->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
}
STDMETHODIMP CAMROutputPin::SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags)
{
	return demux->SetPositionsInternal(0, pCurrent, dwCurrentFlags, pStop, dwStopFlags);
}

int CAMROutputPin::GetDataPacket(DataPacket **packet)
{
	// this method may blokc
	HANDLE	events[] = { ev_can_write, ev_abort };
	DWORD	ret;

	do {
		// if the abort event is set, quit
		if (ev_abort.Check()) return -1;

		ret = WaitForMultipleObjects(2, events, FALSE, 10);
		if (ret == WAIT_OBJECT_0) {
			// return new packet
			*packet = new DataPacket();
			return 0;
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品sm捆绑视频| 欧美一级理论片| 国产日产欧美一区| 另类人妖一区二区av| 日韩三级伦理片妻子的秘密按摩| 日韩高清一区二区| 欧美精品一区二区三区蜜桃视频| 精品一区二区三区视频在线观看| 精品sm捆绑视频| 成人不卡免费av| 亚洲伊人伊色伊影伊综合网| 欧美高清www午色夜在线视频| 天堂一区二区在线免费观看| 日韩视频一区二区在线观看| 国产精品综合在线视频| 中文字幕一区二区三区在线播放| 91黄色免费看| 日本欧美久久久久免费播放网| 久久综合久久综合亚洲| 成人免费视频网站在线观看| 亚洲精品国产无套在线观| 911国产精品| 国产成人在线色| 亚洲午夜羞羞片| 欧美精品一区二区三区久久久| 成人av综合一区| 视频一区二区三区在线| 久久精品这里都是精品| 色老汉av一区二区三区| 精品一区二区三区欧美| 中文字幕一区二区三| 337p亚洲精品色噜噜噜| 国产mv日韩mv欧美| 亚洲成a人v欧美综合天堂下载 | 国产精品一二三区| 亚洲乱码国产乱码精品精的特点 | 成人av在线资源网站| 亚洲午夜av在线| 国产欧美日韩综合精品一区二区| 欧美在线你懂的| 国产黑丝在线一区二区三区| 亚洲午夜视频在线观看| 亚洲国产精品二十页| 7777精品伊人久久久大香线蕉 | 亚洲成人久久影院| 中文字幕第一区二区| 欧美一区二区三级| 色悠久久久久综合欧美99| 黑人巨大精品欧美一区| 亚洲国产精品综合小说图片区| 国产日产欧产精品推荐色| 在线不卡免费欧美| 91丨porny丨国产| 国产精品一区免费视频| 国产不卡视频在线播放| 欧美激情一区二区三区| 国产原创一区二区三区| 亚洲福利视频三区| 亚洲青青青在线视频| 欧美精品一区二区三区蜜桃视频| 欧美日韩午夜精品| 色美美综合视频| 波波电影院一区二区三区| 国产综合色视频| 老司机精品视频在线| 日欧美一区二区| 一区二区三区日韩欧美精品| 国产精品久久久久aaaa樱花| 久久久久久电影| 精品sm捆绑视频| 精品国产乱码久久久久久浪潮| 欧美日韩激情一区二区| 在线观看欧美精品| 在线观看91视频| 日本精品视频一区二区三区| 99精品黄色片免费大全| 高清国产午夜精品久久久久久| 久草热8精品视频在线观看| 日本不卡在线视频| 免费观看30秒视频久久| 免费观看在线综合| 久久成人综合网| 国产一本一道久久香蕉| 国产精品一区2区| 成人中文字幕合集| 成人不卡免费av| 91免费版在线看| 91美女视频网站| 欧美日韩一级片网站| 欧美喷水一区二区| 日韩一级免费一区| 精品国产麻豆免费人成网站| 久久青草欧美一区二区三区| 久久精品一区二区三区不卡| 日本一二三不卡| 自拍av一区二区三区| 亚洲精品欧美激情| 亚洲午夜久久久久中文字幕久| 亚洲国产婷婷综合在线精品| 免费在线欧美视频| 国产一区二区按摩在线观看| 成人高清免费在线播放| 欧洲中文字幕精品| 欧美成人福利视频| 国产精品国产三级国产| 亚洲激情图片一区| 日本欧美韩国一区三区| 国产成人自拍在线| 色婷婷亚洲精品| 91精品黄色片免费大全| 久久久一区二区三区捆绑**| 中文字幕一区在线观看视频| 亚洲成人av电影| 精品在线免费视频| 99久久精品免费精品国产| 欧美三级日韩三级| 2024国产精品| 一区二区在线观看av| 美腿丝袜在线亚洲一区| 岛国精品在线播放| 在线电影一区二区三区| 国产精品私人影院| 免费人成在线不卡| 91啪亚洲精品| 欧美精品一区二区精品网| 国产精品看片你懂得| 日韩av电影一区| 成人av影视在线观看| 777精品伊人久久久久大香线蕉| 久久久久久久久久久久久久久99 | 北条麻妃国产九九精品视频| 欧美日韩国产片| 亚洲国产电影在线观看| 日韩综合小视频| 91在线视频免费91| 亚洲精品在线观看网站| 亚洲激情自拍视频| 国产91色综合久久免费分享| 欧美美女一区二区| 国产精品成人一区二区艾草 | 91丨porny丨蝌蚪视频| 精品日韩欧美一区二区| 亚洲国产一区二区三区青草影视| 国产91丝袜在线播放九色| 日韩视频在线永久播放| 亚洲国产日产av| 97se狠狠狠综合亚洲狠狠| 久久久高清一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 色菇凉天天综合网| 日韩一区日韩二区| 国产成人精品影视| 久久蜜桃一区二区| 精品伊人久久久久7777人| 欧美电影一区二区| 偷偷要91色婷婷| 欧美亚一区二区| 亚洲精品国久久99热| av一区二区三区四区| 国产女主播视频一区二区| 国产在线精品一区二区不卡了| 久久精品亚洲麻豆av一区二区 | 亚洲免费观看高清完整| 丁香激情综合五月| 国产无人区一区二区三区| 国产中文字幕一区| 精品欧美乱码久久久久久1区2区 | 国产在线看一区| 精品国产网站在线观看| 蜜桃视频免费观看一区| 欧美一卡二卡三卡| 蜜桃精品视频在线| 欧美一个色资源| 欧美挠脚心视频网站| 亚洲伊人色欲综合网| av一区二区三区在线| 亚洲欧洲在线观看av| 99亚偷拍自图区亚洲| 成人免费视频在线观看| 91在线观看地址| 亚洲精品一二三区| 欧美日韩精品欧美日韩精品一| 午夜精品福利一区二区三区av | 亚洲国产sm捆绑调教视频| 欧美影视一区在线| 日韩精品视频网| 欧美xxxxx牲另类人与| 国产精品一二三在| 国产精品国产成人国产三级| 色94色欧美sute亚洲13| 午夜精品一区二区三区免费视频 | 91麻豆精东视频| 亚洲午夜在线视频| 日韩三级视频在线看| 国产精品一二三| 亚洲精品亚洲人成人网在线播放| 777欧美精品| 国产河南妇女毛片精品久久久| 最新不卡av在线| 欧美精品日韩一本|