#include <stdint.h>
#include <memory>
+#include <set>
#include <string>
#include <vector>
private:
void open_output_stream();
- void close_output_stream();
static int write_packet_thunk(void *opaque, uint8_t *buf, int buf_size);
int write_packet(uint8_t *buf, int buf_size);
AVOutputFormat *oformat;
- std::unique_ptr<QuickSyncEncoder> quicksync_encoder;
+ std::mutex qs_mu;
+ std::unique_ptr<QuickSyncEncoder> quicksync_encoder; // Under <qs_mu>.
movit::ResourcePool *resource_pool;
QSurface *surface;
std::string va_display;
std::string stream_mux_header;
bool stream_mux_writing_keyframes = false;
+
+ std::atomic<int> quicksync_encoders_in_shutdown{0};
+
+ // Encoders that are shutdown, but need to call release_gl_resources()
+ // (or be deleted) from some thread with an OpenGL context.
+ std::vector<std::unique_ptr<QuickSyncEncoder>> qs_needing_cleanup; // Under <qs_mu>.
};
#endif