int ReadMedia::decodeAudio( gavl_audio_frame_t * af ) { lockState(); if (m_state != STATE_READY || m_audio_stream_count < 1 || m_fifoaudio == NULL ) { unlockState(); return -1; } if ( !m_fifoaudio->Get( af ) ) { if ( m_aeof ) { m_pcm_seek = SEEK_NOTHING; unlockState(); signalA(); return 0; } else { printf("Couldn't get an audio frame, audiofifo is %f full.\n", m_fifoaudio->getSizePercentage()); // this can only happen if the fifo is empty unlockState(); signalA(); return -1; } } //m_atime = af->timestamp / (double)m_audio_format.samplerate; unlockState(); signalA(); return 1 ; }
bool ReadMedia::rewind() { // NOTE!! Always check for stream count before setting aeof or veof lockState(); if ( m_state == STATE_READY && m_file != NULL) { //printf("ReadMedia::rewind(), valid_samples=%d\n", m_audio_frame->valid_samples); m_pcm_seek = SEEK_REWIND; if(m_audio_stream_count) m_aeof = false; //m_atime = 0; m_frame_seek=SEEK_REWIND; if (m_video_stream_count) m_veof = false; //m_vtime=0; unlockState(); if (m_audio_stream_count) { signalA(); // only signal one or the other here //printf("ReadMedia::rewind(), signaled audio\n"); // we are gong to flush here even though it is flushed // during the audio or video thread. This will ensure our fifo // is clean and empty. Otherwise, the audio thread may be waiting // at the bottom of its loop and not make it to the flush part even // though we signalled it. if (m_fifoaudio) m_fifoaudio->Flush(); } else if (m_video_stream_count) { signalV(); if (m_fifovideo) m_fifovideo->Flush(); } return true; } unlockState(); return false; }
int main() { // probamos una conexión de signal con otro signal (2009-06-09) con parámetros { mtk::Signal<> signalA; mtk::Signal<> signalB; PrReceptor pr; signalB.connect(&pr, &PrReceptor::OnNoParam); signalB(); // aunque la conexión se puede hacer así... signalA.connect(&signalB, &mtk::Signal<>::operator()); // parece más cómodo de esta otra forma signalA.connect(&signalB); // emitimos señal signalA(); } // probamos una conexión de signal con otro signal (2009-06-09) con parámetros { mtk::Signal<int> signalA; mtk::Signal<int> signalB; PrReceptor pr; signalB.connect(&pr, &PrReceptor::OnIntParam); signalB(5); signalA.connect(&signalB); signalA.emit(3); } std::cout << std::endl; #include "support/release_on_exit.hpp" return 0; }
void ReadMedia::signalAV() { signalA(); signalV(); }