示例#1
0
status_t EMBeOutputNode::HandleMessage(int32 message, const void* data, size_t size)
{
	if(message == EM_PORT_MESSAGE_INCOMING_BUFFER)
	{
		m_opBuffer = *((BBuffer**) data);
		if(RunState() != B_STARTED)
		{
			emerr << "ERROR! Node received buffer when not running!" << endl;
			m_opBuffer -> Recycle();
			return B_OK;
		}

		if(m_opBuffer != NULL)
		{
			vCount++;
			EMMediaFormat* opFormat = GetConnectedEMMediaFormat();
			if((opFormat -> m_eType & EM_TYPE_ANY_VIDEO) > 0)
			{
				opFormat -> m_vFrameRate = *(static_cast<float*>(EMMediaEngine::Instance() -> GetSettingsRepository() -> GetSetting(SETTING_VIDEO_FRAMERATE)));			
			}

			int64 vFrames = EMBeMediaUtility::FramesInBuffer(m_opBuffer, opFormat, EM_TYPE_RAW_AUDIO); // + 44100 / 4;
			m_vNumberOfReceivedFrames += vFrames;
			int64 vTime = EMBeMediaUtility::FramesToTime(m_vNumberOfReceivedFrames, m_opSystemAudioFormat);
			int64 vNextBufferPerf = static_cast<uint64>(floor(static_cast<float>(m_vStartingTime) + vTime));
			
			m_opBuffer -> Header() -> start_time = vNextBufferPerf;
			
			media_timed_event sEvent(vNextBufferPerf, BTimedEventQueue::B_HANDLE_BUFFER);
			sEvent.pointer = m_opBuffer;
			sEvent.cleanup = BTimedEventQueue::B_RECYCLE_BUFFER;
			status_t vResult = EventQueue() -> AddEvent(sEvent);
			if(vResult != B_OK)
			{
				emerr << "ERROR! Couldn't add the B_HANDLE_BUFFER event to the queue: " << strerror(vResult) << endl;
				m_opBuffer -> Recycle();
			}
		}
		else
			emerr << "ERROR! Node received invalid EM_NODE_BUFFER_ADDED message!" << endl;
		return B_OK;
	}
	else if(message == EM_PORT_MESSAGE_FLUSH_QUEUE)
	{
		media_timed_event sEvent(TimeSource() -> Now(), EM_TIMED_EVENT_FLUSH_CASH);
		EventQueue() -> AddEvent(sEvent);
	}
	else if(message == EM_PORT_MESSAGE_RESET)
	{
		media_timed_event sEvent(TimeSource() -> Now(), EM_TIMED_EVENT_RESET);
		EventQueue() -> AddEvent(sEvent);
	}
	else 
	{
		;//emout_commented_out_4_release << "ERROR! Received unknown message!" << endl;
		BMediaNode::HandleBadMessage(message, data, size);
	}
	return B_OK;
}
示例#2
0
///////////////////////////////////////////////////////
// CSoundRegistry::SoundEvent
//
//
void CSoundRegistry::SoundEvent(LPCSTR szEvent, LPCSTR szEventName, LPCSTR szPath)
{
	CRegistry sound;
	CString sEvent("AppEvents\\EventLabels\\");

	sEvent += szEvent;

	sound.CreateKey(sEvent, HKEY_CURRENT_USER);
	sound.SetString(NULL, szEventName);

	sEvent  = "AppEvents\\Schemes\\Apps\\";
	sEvent  += m_sScheme;

	if (!m_bSetScheme)
	{
		m_bSetScheme = TRUE;
		sound.CreateKey(sEvent, HKEY_CURRENT_USER);
		sound.SetString(NULL, m_sSchemeName);
	}

	sEvent += '\\';
	sEvent += szEvent;

	// If the key doesn't exist
	if (!sound.OpenKey(sEvent, HKEY_CURRENT_USER))
	{
		// Create the key with the right name
		sound.CreateKey(sEvent, HKEY_CURRENT_USER);
		sound.SetString(NULL, szEventName);

		// Set the default sound
		sEvent += "\\.current";
		sound.CreateKey(sEvent, HKEY_CURRENT_USER);
		sEvent  = szPath;
		sEvent += szEventName;
		sEvent += ".wav";
		sound.SetString(NULL, sEvent);
	}
}