/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include namespace Swift { void VideoEncoder::addFrame(VideoFrame::ref frame) { boost::mutex::scoped_lock lock(queueMutex); frames.push(frame); lock.unlock(); queueCondVar.notify_one(); } void VideoEncoder::startEncoding() { stop = false; encodingThread = boost::thread(&VideoEncoder::encodingLoop, this); } void VideoEncoder::stopEncoding() { stop = true; encodingThread.join(); } VideoFrame::ref VideoEncoder::popWhenFrameIsAvailable() { boost::mutex::scoped_lock lock(queueMutex); while (frames.empty()) { queueCondVar.wait(lock); } VideoFrame::ref popped = frames.front(); frames.pop(); return popped; } }