X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=video_encoder.cpp;h=910d4b70fd1c248b29f8deb31cffdc7345da4e92;hb=4b286cabe961c426ce340a85167346012691d711;hp=0df3b4ffe66c2bf8019be319233faa010c3796f8;hpb=1462715cd71d8f61b9e53b31c34d591d150f2df3;p=nageru diff --git a/video_encoder.cpp b/video_encoder.cpp index 0df3b4f..910d4b7 100644 --- a/video_encoder.cpp +++ b/video_encoder.cpp @@ -9,8 +9,10 @@ #include "httpd.h" #include "timebase.h" #include "quicksync_encoder.h" +#include "x264_encoder.h" using namespace std; +using namespace movit; namespace { @@ -33,8 +35,8 @@ string generate_local_dump_filename(int frame) } // namespace -VideoEncoder::VideoEncoder(QSurface *surface, const std::string &va_display, int width, int height, HTTPD *httpd) - : surface(surface), va_display(va_display), width(width), height(height), httpd(httpd) +VideoEncoder::VideoEncoder(ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, HTTPD *httpd) + : resource_pool(resource_pool), surface(surface), va_display(va_display), width(width), height(height), httpd(httpd) { open_output_stream(); @@ -45,8 +47,12 @@ VideoEncoder::VideoEncoder(QSurface *surface, const std::string &va_display, int } stream_audio_encoder->add_mux(stream_mux.get()); + if (global_flags.x264_video_to_http) { + x264_encoder.reset(new X264Encoder(stream_mux.get())); + } + string filename = generate_local_dump_filename(/*frame=*/0); - quicksync_encoder.reset(new QuickSyncEncoder(filename, surface, va_display, width, height, stream_mux.get(), stream_audio_encoder.get())); + quicksync_encoder.reset(new QuickSyncEncoder(filename, resource_pool, surface, va_display, width, height, stream_mux.get(), stream_audio_encoder.get(), x264_encoder.get())); } VideoEncoder::~VideoEncoder() @@ -60,7 +66,7 @@ void VideoEncoder::do_cut(int frame) string filename = generate_local_dump_filename(frame); printf("Starting new recording: %s\n", filename.c_str()); quicksync_encoder->shutdown(); - quicksync_encoder.reset(new QuickSyncEncoder(filename, surface, va_display, width, height, stream_mux.get(), stream_audio_encoder.get())); + quicksync_encoder.reset(new QuickSyncEncoder(filename, resource_pool, surface, va_display, width, height, stream_mux.get(), stream_audio_encoder.get(), x264_encoder.get())); } void VideoEncoder::add_audio(int64_t pts, std::vector audio)