- struct storage_task {
- unsigned long long display_order;
- int frame_type;
- std::vector<float> audio;
- int64_t pts, dts;
- };
- struct PendingFrame {
- RefCountedGLsync fence;
- std::vector<RefCountedFrame> input_frames;
- int64_t pts;
- };
-
- void copy_thread_func();
- void encode_frame(PendingFrame frame, int encoding_frame_num, 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::mutex storage_task_queue_mutex;
- std::condition_variable storage_task_queue_changed;
- int srcsurface_status[SURFACE_NUM]; // protected by storage_task_queue_mutex
- std::queue<storage_task> storage_task_queue; // protected by storage_task_queue_mutex
- bool storage_thread_should_quit = false; // protected by storage_task_queue_mutex
-
- std::mutex frame_queue_mutex;
- std::condition_variable frame_queue_nonempty;
- bool copy_thread_should_quit = false; // under frame_queue_mutex
-
- //int frame_width, frame_height;
- //int ;
- int current_storage_frame;
-
- std::map<int, PendingFrame> pending_video_frames; // under frame_queue_mutex
- std::map<int64_t, std::vector<float>> pending_audio_frames; // under frame_queue_mutex
- QSurface *surface;
-
- AVCodecContext *context_audio;
- HTTPD *httpd;