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(); });
- if (copy_thread_should_quit && pending_audio_frames.empty()) return;
+ frame_queue_nonempty.wait(lock, [this]{ return encode_thread_should_quit || !pending_audio_frames.empty(); });
+ if (encode_thread_should_quit && pending_audio_frames.empty()) return;
auto it = pending_audio_frames.begin();
if (it->first > task.pts) break;
audio_pts = it->first;
storage_thread = thread(&H264Encoder::storage_task_thread, this);
- copy_thread = thread([this]{
+ encode_thread = thread([this]{
//SDL_GL_MakeCurrent(window, context);
QOpenGLContext *context = create_context(this->surface);
eglBindAPI(EGL_OPENGL_API);
eglGetError());
exit(1);
}
- copy_thread_func();
+ encode_thread_func();
});
}
{
{
unique_lock<mutex> lock(frame_queue_mutex);
- copy_thread_should_quit = true;
+ encode_thread_should_quit = true;
frame_queue_nonempty.notify_all();
}
- copy_thread.join();
+ encode_thread.join();
{
unique_lock<mutex> lock(storage_task_queue_mutex);
storage_thread_should_quit = true;
frame_queue_nonempty.notify_all();
}
-void H264Encoder::copy_thread_func()
+void H264Encoder::encode_thread_func()
{
int64_t last_dts = -1;
int gop_start_display_frame_num = 0;
{
unique_lock<mutex> lock(frame_queue_mutex);
frame_queue_nonempty.wait(lock, [this, display_frame_num]{
- return copy_thread_should_quit || pending_video_frames.count(display_frame_num) != 0;
+ return encode_thread_should_quit || pending_video_frames.count(display_frame_num) != 0;
});
- if (copy_thread_should_quit) {
+ if (encode_thread_should_quit) {
return;
} else {
frame = move(pending_video_frames[display_frame_num]);
int64_t pts;
};
- void copy_thread_func();
+ void encode_thread_func();
void encode_frame(PendingFrame frame, int encoding_frame_num, int display_frame_num, int gop_start_display_frame_num,
int frame_type, int64_t pts, int64_t dts);
void storage_task_thread();
void storage_task_enqueue(storage_task task);
void save_codeddata(storage_task task);
- std::thread copy_thread, storage_thread;
+ std::thread encode_thread, storage_thread;
std::mutex storage_task_queue_mutex;
std::condition_variable storage_task_queue_changed;
std::mutex frame_queue_mutex;
std::condition_variable frame_queue_nonempty;
- bool copy_thread_should_quit = false; // under frame_queue_mutex
+ bool encode_thread_should_quit = false; // under frame_queue_mutex
//int frame_width, frame_height;
//int ;