Esempio n. 1
0
bool Output::Open()
{
	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	if (videofd < 0)
		videofd = open(VIDEODEV, O_RDWR);

	if (videofd < 0)
		return false;

	ioctl(videofd, VIDEO_CLEAR_BUFFER, NULL);
	dioctl(videofd, VIDEO_SELECT_SOURCE, (void *) VIDEO_SOURCE_MEMORY);
	dioctl(videofd, VIDEO_SET_STREAMTYPE, (void *) STREAM_TYPE_PROGRAM);
	dioctl(videofd, VIDEO_SET_SPEED, DVB_SPEED_NORMAL_PLAY);

	if (audiofd < 0)
		audiofd = open(AUDIODEV, O_RDWR);

	if (audiofd < 0) {
		close(videofd);
		videofd = -1;
		return false;
	}

	ioctl(audiofd, AUDIO_CLEAR_BUFFER, NULL);
	dioctl(audiofd, AUDIO_SELECT_SOURCE, (void *) AUDIO_SOURCE_MEMORY);
	dioctl(audiofd, AUDIO_SET_STREAMTYPE, (void *) STREAM_TYPE_PROGRAM);

	return true;
}
Esempio n. 2
0
bool Output::Stop()
{
	bool ret = true;

	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	if (videofd > -1) {
		ioctl(videofd, VIDEO_CLEAR_BUFFER, NULL);
		/* set back to normal speed (end trickmodes) */
		dioctl(videofd, VIDEO_SET_SPEED, DVB_SPEED_NORMAL_PLAY);
		if (dioctl(videofd, VIDEO_STOP, NULL))
			ret = false;
	}

	if (audiofd > -1) {
		ioctl(audiofd, AUDIO_CLEAR_BUFFER, NULL);
		/* set back to normal speed (end trickmodes) */
		dioctl(audiofd, AUDIO_SET_SPEED, DVB_SPEED_NORMAL_PLAY);
		if (dioctl(audiofd, AUDIO_STOP, NULL))
			ret = false;
	}

	return ret;
}
Esempio n. 3
0
bool Output::SwitchAudio(Track *track)
{
	ScopedLock a_lock(audioMutex);
	if (audioTrack && track->stream == audioTrack->stream)
		return true;
	if (audiofd > -1) {
		dioctl(audiofd, AUDIO_STOP, NULL);
		ioctl(audiofd, AUDIO_CLEAR_BUFFER, NULL);
	}
	audioTrack = track;
	if (track->stream) {
        AVCodecContext *avcc = track->stream->codec;
		if (!avcc)
			return false;
			audioWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type, audioTrack->ac3flags);
			audioWriter->Init(audiofd, audioTrack->stream, player);
		if (audiofd > -1) {
			audio_encoding_t audioEncoding = AUDIO_ENCODING_LPCMA;
		if (audioTrack->ac3flags != 6)
			audioEncoding = Writer::GetAudioEncoding(avcc->codec_id);
			dioctl(audiofd, AUDIO_SET_ENCODING, audioEncoding);
			dioctl(audiofd, AUDIO_PLAY, NULL);
		}
	}
	return true;
}
Esempio n. 4
0
bool Output::Play()
{
	bool ret = true;

	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	AVCodecContext *avcc;

	if (videoTrack && videoTrack->stream && videofd > -1 && (avcc = videoTrack->stream->codec)) {
		videoWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type, videoTrack->ac3flags);
		videoWriter->Init(videofd, videoTrack->stream, player);
		if (dioctl(videofd, VIDEO_SET_ENCODING, videoWriter->GetVideoEncoding(avcc->codec_id))
		||  dioctl(videofd, VIDEO_PLAY, NULL))
			ret = false;
	}

	if (audioTrack && audioTrack->stream && audiofd > -1 && (avcc = audioTrack->stream->codec)) {
		audioWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type, audioTrack->ac3flags);
		audioWriter->Init(audiofd, audioTrack->stream, player);
		audio_encoding_t audioEncoding = AUDIO_ENCODING_LPCMA;
		if (audioTrack->ac3flags != 6)
			audioEncoding = audioWriter->GetAudioEncoding(avcc->codec_id);
		if (dioctl(audiofd, AUDIO_SET_ENCODING, audioEncoding)
		||  dioctl(audiofd, AUDIO_PLAY, NULL))
			ret = false;
	}
	return ret;
}
Esempio n. 5
0
bool Output::SwitchVideo(AVStream *stream)
{
	ScopedLock v_lock(videoMutex);
	if (stream == videoStream)
	{
		return true;
	}
	if (videofd > -1)
	{
		dioctl(videofd, VIDEO_STOP, NULL);
		ioctl(videofd, VIDEO_CLEAR_BUFFER, NULL);
	}
	videoStream = stream;
	if (stream)
	{
		AVCodecContext *avcc = stream->codec;
		if (!avcc)
		{
			return false;
		}
		videoWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type);
		videoWriter->Init(videofd, videoStream, player);
		if (videofd > -1)
		{
			dioctl(videofd, VIDEO_SET_ENCODING, Writer::GetVideoEncoding(avcc->codec_id));
			dioctl(videofd, VIDEO_PLAY, NULL);
		}
	}
	return true;
}
Esempio n. 6
0
bool Output::SwitchAudio(AVStream *stream)
{
	ScopedLock a_lock(audioMutex);
	if (stream == audioStream)
	{
		return true;
	}
	if (audiofd > -1)
	{
		dioctl(audiofd, AUDIO_STOP, NULL);
		ioctl(audiofd, AUDIO_CLEAR_BUFFER, NULL);
	}
	audioStream = stream;
	if (stream)
	{
		AVCodecContext *avcc = stream->codec;
		if (!avcc)
		{
			return false;
		}
		audioWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type);
		audioWriter->Init(audiofd, audioStream, player);
		if (audiofd > -1)
		{
			dioctl(audiofd, AUDIO_SET_ENCODING, Writer::GetAudioEncoding(avcc->codec_id));
			dioctl(audiofd, AUDIO_PLAY, NULL);
		}
	}
	return true;
}
Esempio n. 7
0
bool Output::Play()
{
	bool ret = true;

	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	AVCodecContext *avcc;

	if (videoStream && videofd > -1 && (avcc = videoStream->codec))
	{
		videoWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type);
		videoWriter->Init(videofd, videoStream, player);
		if (dioctl(videofd, VIDEO_SET_ENCODING, videoWriter->GetVideoEncoding(avcc->codec_id))
		||  dioctl(videofd, VIDEO_PLAY, NULL))
		{
			ret = false;
		}
	}

	if (audioStream && audiofd > -1 && (avcc = audioStream->codec))
	{
		audioWriter = Writer::GetWriter(avcc->codec_id, avcc->codec_type);
		audioWriter->Init(audiofd, audioStream, player);
		if (dioctl(audiofd, AUDIO_SET_ENCODING, audioWriter->GetAudioEncoding(avcc->codec_id))
		||  dioctl(audiofd, AUDIO_PLAY, NULL))
		{
			ret = false;
		}
	}
	return ret;
}
Esempio n. 8
0
bool Output::GetFrameCount(int64_t &framecount)
{
	dvb_play_info_t playInfo;

	if ((videofd > -1 && !dioctl(videofd, VIDEO_GET_PLAY_INFO, (void *) &playInfo)) ||
	    (audiofd > -1 && !dioctl(audiofd, AUDIO_GET_PLAY_INFO, (void *) &playInfo))) {
		framecount = playInfo.frame_count;
		return true;
	}
	return false;
}
Esempio n. 9
0
bool Output::Continue()
{
	bool ret = true;

	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	if (videofd > -1 && dioctl(videofd, VIDEO_CONTINUE, NULL))
		ret = false;

	if (audiofd > -1 && dioctl(audiofd, AUDIO_CONTINUE, NULL))
		ret = false;

	return ret;
}
Esempio n. 10
0
bool Output::Pause()
{
	bool ret = true;

	ScopedLock v_lock(videoMutex);
	ScopedLock a_lock(audioMutex);

	if (videofd > -1) {
		if (dioctl(videofd, VIDEO_FREEZE, NULL))
			ret = false;
	}

	if (audiofd > -1) {
		if (dioctl(audiofd, AUDIO_PAUSE, NULL))
			ret = false;
	}

	return ret;
}
Esempio n. 11
0
bool Output::AVSync(bool b)
{
	ScopedLock a_lock(audioMutex);
	return audiofd > -1 && !dioctl(audiofd, AUDIO_SET_AV_SYNC, b);
}
Esempio n. 12
0
bool Output::SlowMotion(int speed)
{
	ScopedLock v_lock(videoMutex);
	return videofd > -1 && !dioctl(videofd, VIDEO_SLOWMOTION, speed);
}
Esempio n. 13
0
bool Output::FastForward(int speed)
{
	ScopedLock v_lock(videoMutex);
	return videofd > -1 && !dioctl(videofd, VIDEO_FAST_FORWARD, speed);
}
Esempio n. 14
0
bool Output::Mute(bool b)
{
	ScopedLock a_lock(audioMutex);
	//AUDIO_SET_MUTE has no effect with new player
	return audiofd > -1 && !dioctl(audiofd, b ? AUDIO_STOP : AUDIO_PLAY, NULL);
}