void NuPlayer::Renderer::flushSync(bool audio) { { Mutex::Autolock autoLock(mFlushLock); if (audio) { CHECK(!mFlushingAudio); mFlushingAudio = true; } else { CHECK(!mFlushingVideo); mFlushingVideo = true; } } sp<AMessage> msg = new AMessage(kWhatFlush, id()); msg->setInt32("audio", static_cast<int32_t>(audio)); onFlush(msg); }
QT_BEGIN_NAMESPACE QHtmlWindow::QHtmlWindow(QWindow *window, QObject *htmlService) : QPlatformWindow(window), mHtmlService(htmlService) { mDebug = true; mDebugEvents = false; QWindowSystemInterface::setSynchronousWindowsSystemEvents(true); // resize - paint bug QMetaObject::invokeMethod(mHtmlService, "allocateWinId", Q_RETURN_ARG(int, mWinId), Q_ARG(int, static_cast<int>(window->type()))); connect(mHtmlService, SIGNAL(destroy(int)), SLOT(onDestroy(int))); connect(mHtmlService, SIGNAL(activated(int)), SLOT(onActivated(int))); connect(mHtmlService, SIGNAL(setWindowGeometry(int, int, int, int, int)), SLOT(onSetGeometry(int, int, int, int, int))); connect(mHtmlService, SIGNAL(keyEvent(int, int, int, int, QString)), SLOT(onKeyEvent(int, int, int, int, QString))); connect(mHtmlService, SIGNAL(mouseEvent(int, int, int, int, int, int, int)), SLOT(onMouseEvent(int, int, int, int, int, int, int))); connect(mHtmlService, SIGNAL(mouseWheel(int, int, int, int, int, int, int)), SLOT(onMouseWheel(int, int, int, int, int, int, int))); connect(mHtmlService, SIGNAL(flush()), SLOT(onFlush())); const QRect rect = window->geometry(); QMetaObject::invokeMethod(mHtmlService, "setGeometry", Q_ARG(int, mWinId), Q_ARG(int, rect.x()), Q_ARG(int, rect.y()), Q_ARG(int, rect.width()), Q_ARG(int, rect.height())); }
void PolygonShapeBuilder::DrawTriangle( const Vector3& point1, const Vector3& point2, const Vector3& point3, const Vector4& color1, const Vector4& color2, const Vector4& color3) { POMDOG_ASSERT(minVertexCount <= maxVertexCount); POMDOG_ASSERT(3 < maxVertexCount); if (vertices.size() + 3 > maxVertexCount) { if (onFlush) { onFlush(); } } POMDOG_ASSERT(vertices.size() + 3 <= maxVertexCount); vertices.push_back(Vertex{point1, color1}); vertices.push_back(Vertex{point2, color2}); vertices.push_back(Vertex{point3, color3}); }
void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatDrainAudioQueue: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mAudioQueueGeneration) { break; } mDrainAudioQueuePending = false; if (onDrainAudioQueue()) { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK); uint32_t numFramesPendingPlayout = mNumFramesWritten - numFramesPlayed; // This is how long the audio sink will have data to // play back. int64_t delayUs = mAudioSink->msecsPerFrame() * numFramesPendingPlayout * 1000ll; // Let's give it more data after about half that time // has elapsed. postDrainAudioQueue(delayUs / 2); } break; } case kWhatDrainVideoQueue: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mVideoQueueGeneration) { break; } mDrainVideoQueuePending = false; onDrainVideoQueue(); postDrainVideoQueue(); break; } case kWhatQueueBuffer: { onQueueBuffer(msg); break; } case kWhatQueueEOS: { onQueueEOS(msg); break; } case kWhatFlush: { onFlush(msg); break; } case kWhatAudioSinkChanged: { onAudioSinkChanged(); break; } case kWhatPause: { onPause(); break; } case kWhatResume: { onResume(); break; } default: TRESPASS(); break; } }
void MediaFilter::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatAllocateComponent: { onAllocateComponent(msg); break; } case kWhatConfigureComponent: { onConfigureComponent(msg); break; } case kWhatStart: { onStart(); break; } case kWhatProcessBuffers: { processBuffers(); break; } case kWhatInputBufferFilled: { onInputBufferFilled(msg); break; } case kWhatOutputBufferDrained: { onOutputBufferDrained(msg); break; } case kWhatShutdown: { onShutdown(msg); break; } case kWhatFlush: { onFlush(); break; } case kWhatResume: { // nothing to do break; } case kWhatSetParameters: { onSetParameters(msg); break; } case kWhatCreateInputSurface: { onCreateInputSurface(); break; } case GraphicBufferListener::kWhatFrameAvailable: { onInputFrameAvailable(); break; } case kWhatSignalEndOfInputStream: { onSignalEndOfInputStream(); break; } default: { ALOGE("Message not handled:\n%s", msg->debugString().c_str()); break; } } }
void CLogger::flush(bool dumpLogs) { CEvent event(this, boost::assign::map_list_of("dumpLogs", (void*)&dumpLogs)); onFlush(event); clearLogs(); }
void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatDrainAudioQueue: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mAudioQueueGeneration) { break; } mDrainAudioQueuePending = false; if (onDrainAudioQueue()) { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK); uint32_t numFramesPendingPlayout = mNumFramesWritten - numFramesPlayed; // This is how long the audio sink will have data to // play back. int64_t delayUs = mAudioSink->msecsPerFrame() * numFramesPendingPlayout * 1000ll; // Let's give it more data after about half that time // has elapsed. #ifndef ANDROID_DEFAULT_CODE // half that is to large, set it to 20ms if (numFramesPlayed > mNumFramesWritten) ALOGW("numFramesPlayed(%d) > mNumFramesWritten(%d), no reset @ kWhatDrainAudioQueue", numFramesPlayed, mNumFramesWritten); if (delayUs > 40000) delayUs = 40000; #endif postDrainAudioQueue(delayUs / 2); } break; } case kWhatDrainVideoQueue: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mVideoQueueGeneration) { break; } mDrainVideoQueuePending = false; onDrainVideoQueue(); postDrainVideoQueue(); break; } case kWhatQueueBuffer: { onQueueBuffer(msg); break; } case kWhatQueueEOS: { LOGI("kWhatQueueEOS"); mNeedCheckBuffer = false; onQueueEOS(msg); break; } case kWhatFlush: { onFlush(msg); break; } case kWhatAudioSinkChanged: { onAudioSinkChanged(); break; } case kWhatPause: { onPause(); break; } case kWhatResume: { mIsbufferempty = false; onResume(); break; } #ifndef ANDROID_DEFAULT_CODE case kWhatCheckRenderBufferStatus: { ALOGV("kWhatCheckRenderBufferStatus need check buff : %s",mNeedCheckBuffer?"YES":"NO"); sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatBufferNotify); int32_t rate = 0; ALOGV("mIsSeeking(%d) mVideoQueue.size(%d) mAudioQueue.size(%d)",mIsSeeking,mVideoQueue.size(),mAudioQueue.size()); if(mNeedCheckBuffer == true){ switch(mIsbufferempty){ case true: if(mIsSeeking == true) { // only check VideoQueue after seek if (mVideoQueue.size()>0){ ALOGV("kWhatCheckRenderBufferStatus full"); rate = 100; notify->setInt32("bufRate", rate); notify->post(); mIsSeeking = false; } } else { if(mDebugDisableAVsync)//Disable AV SYNC for debug { ALOGV("kWhatCheckRenderBufferStatus full"); rate = 100; notify->setInt32("bufRate", rate); notify->post(); } else if (mAudioQueue.size()>2)//Wait audio { ALOGV("kWhatCheckRenderBufferStatus full"); rate = 100; notify->setInt32("bufRate", rate); notify->post(); } } break; case false: if(mIsSeeking == true) { // only check VideoQueue after seek if (mVideoQueue.empty()) { mIsbufferempty = true; ALOGV("kWhatCheckRenderBufferStatus empty"); rate = 0; notify->setInt32("bufRate", rate); notify->post(); } } else { if(mDebugDisableAVsync)//Disable AV SYNC for debug { mIsbufferempty = true; ALOGV("kWhatCheckRenderBufferStatus empty"); rate = 0; notify->setInt32("bufRate", rate); notify->post(); } else if (mAudioQueue.empty())//Wait audio empty { mIsbufferempty = true; ALOGV("kWhatCheckRenderBufferStatus empty"); rate = 0; notify->setInt32("bufRate", rate); notify->post(); } } break; default: break; } }else{ rate = 100; notify->setInt32("bufRate", rate); notify->post(); } (new AMessage(kWhatCheckRenderBufferStatus, id()))->post(300000); break; } case kWhatStatusNotify: { int32_t status; sp<AMessage> message; CHECK(msg->findMessage("message", &message)); CHECK(message->findInt32("status", &status)); LOGI(" kWhatStatusNotify %d",status); switch(status){ case MEDIA_SEEK_COMPLETE: mIsSeeking = true; break; default: break; } break; } #endif default: TRESPASS(); break; } }