#include "httpd.h"
#include "timebase.h"
+using namespace std;
+
class QOpenGLContext;
class QSurface;
// Encode and add all audio frames up to and including the pts of this video frame.
for ( ;; ) {
int64_t audio_pts;
- std::vector<float> audio;
+ vector<float> audio;
{
unique_lock<mutex> lock(frame_queue_mutex);
frame_queue_nonempty.wait(lock, [this]{ return copy_thread_should_quit || !pending_audio_frames.empty(); });
// this is weird. but it seems to put a new frame onto the queue
void H264Encoder::storage_task_enqueue(storage_task task)
{
- std::unique_lock<std::mutex> lock(storage_task_queue_mutex);
+ unique_lock<mutex> lock(storage_task_queue_mutex);
storage_task_queue.push(move(task));
srcsurface_status[task.display_order % SURFACE_NUM] = SRC_SURFACE_IN_ENCODING;
storage_task_queue_changed.notify_all();
storage_task current;
{
// wait until there's an encoded frame
- std::unique_lock<std::mutex> lock(storage_task_queue_mutex);
+ unique_lock<mutex> lock(storage_task_queue_mutex);
storage_task_queue_changed.wait(lock, [this]{ return storage_thread_should_quit || !storage_task_queue.empty(); });
if (storage_thread_should_quit) return;
current = move(storage_task_queue.front());
save_codeddata(move(current));
{
- std::unique_lock<std::mutex> lock(storage_task_queue_mutex);
+ unique_lock<mutex> lock(storage_task_queue_mutex);
srcsurface_status[current.display_order % SURFACE_NUM] = SRC_SURFACE_FREE;
storage_task_queue_changed.notify_all();
}
memset(&pic_param, 0, sizeof(pic_param));
memset(&slice_param, 0, sizeof(slice_param));
- storage_thread = std::thread(&H264Encoder::storage_task_thread, this);
+ storage_thread = thread(&H264Encoder::storage_task_thread, this);
- copy_thread = std::thread([this]{
+ copy_thread = thread([this]{
//SDL_GL_MakeCurrent(window, context);
QOpenGLContext *context = create_context(this->surface);
eglBindAPI(EGL_OPENGL_API);
{
{
// Wait until this frame slot is done encoding.
- std::unique_lock<std::mutex> lock(storage_task_queue_mutex);
+ unique_lock<mutex> lock(storage_task_queue_mutex);
storage_task_queue_changed.wait(lock, [this]{ return storage_thread_should_quit || (srcsurface_status[current_storage_frame % SURFACE_NUM] == SRC_SURFACE_FREE); });
if (storage_thread_should_quit) return false;
}
return true;
}
-void H264Encoder::add_audio(int64_t pts, std::vector<float> audio)
+void H264Encoder::add_audio(int64_t pts, vector<float> audio)
{
{
unique_lock<mutex> lock(frame_queue_mutex);
frame_queue_nonempty.notify_all();
}
-void H264Encoder::end_frame(RefCountedGLsync fence, int64_t pts, const std::vector<RefCountedFrame> &input_frames)
+void H264Encoder::end_frame(RefCountedGLsync fence, int64_t pts, const vector<RefCountedFrame> &input_frames)
{
{
unique_lock<mutex> lock(frame_queue_mutex);