void BaseVideoPlayer::flush()
{


	doFlush_requested = true;
	lock();
	lockDecoder();
	doFlush_requested = false;
	doFlush = true;
	while (!packets.empty())
	{
		OMXPacket *pkt = packets.front();
		packets.pop_front();
		OMXReader::freePacket(pkt);

	}

	currentPTS = DVD_NOPTS_VALUE;
	cachedSize = 0;

	if(decoder)
	{
		decoder->Reset();
	}

	unlockDecoder();
	unlock();
}
Example #2
0
void OMXAudioPlayer::process()
{
    OMXPacket* omxPacket = NULL;

    while(!doStop && !doAbort)
    {
        lock();
        if(packets.empty())
        {
            pthread_cond_wait(&m_packet_cond, &m_lock);
        }
        unlock();

        if(doAbort)
        {
            break;
        }

        lock();
        if(doFlush && omxPacket)
        {
            OMXReader::freePacket(omxPacket);
            omxPacket = NULL;
            doFlush = false;
        }
        else if(!omxPacket && !packets.empty())
        {
            omxPacket = packets.front();
            cachedSize -= omxPacket->size;
            packets.pop_front();
        }
        unlock();

        lockDecoder();
        if(doFlush && omxPacket)
        {
            OMXReader::freePacket(omxPacket);
            omxPacket = NULL;
            doFlush = false;
        }
        else if(omxPacket && decode(omxPacket))
        {
            OMXReader::freePacket(omxPacket);
            omxPacket = NULL;
        }
        unlockDecoder();
    }

    if(omxPacket)
    {
        OMXReader::freePacket(omxPacket);
    }
}
Example #3
0
void OMXAudioPlayer::flush()
{
    //ofLogVerbose(__func__) << "OMXAudioPlayer::Flush start";
    lock();
    lockDecoder();
    doFlush = true;
    while (!packets.empty())
    {
        OMXPacket *pkt = packets.front();
        packets.pop_front();
        OMXReader::freePacket(pkt);
    }
    currentPTS = DVD_NOPTS_VALUE;
    cachedSize = 0;
    if(decoder)
    {
        decoder->flush();
    }
    unlockDecoder();
    unlock();
    //ofLogVerbose(__func__) << "OMXAudioPlayer::Flush end";
}
void BaseVideoPlayer::process()
{
	OMXPacket *omxPacket = NULL;

	//m_pts was previously set to 0 - might need later...
	//currentPTS = 0;
	
	while(!doStop && !doAbort)
	{
		lock();
		if(packets.empty())
		{
			pthread_cond_wait(&m_packet_cond, &m_lock);
		}
		unlock();

		if(doAbort)
		{
			break;
		}

		lock();
		if(doFlush && omxPacket)
		{
			OMXReader::freePacket(omxPacket);
			omxPacket = NULL;
			doFlush = false;
		}
		else
		{
			if(!omxPacket && !packets.empty())
			{
				omxPacket = packets.front();
				cachedSize -= omxPacket->size;
                //ofLogNotice() << "omxPacket->pts: " << omxPacket->pts;
				packets.pop_front();
			}
		}
		unlock();

		lockDecoder();
		if(doFlush && omxPacket)
		{
			OMXReader::freePacket(omxPacket);
			omxPacket = NULL;
			doFlush = false;
		}
		else
		{
			if(omxPacket && decode(omxPacket))
			{
				
				OMXReader::freePacket(omxPacket);
				omxPacket = NULL;
			}
		}
		
		unlockDecoder();


	}
	
	if(omxPacket)
	{
		OMXReader::freePacket(omxPacket);
	}
}