X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=video_encoder.cpp;h=910d4b70fd1c248b29f8deb31cffdc7345da4e92;hb=4b286cabe961c426ce340a85167346012691d711;hp=8fd9723239f613345151fb11323371be19497728;hpb=90d0745245f83999e88bc50cad57be3e4a1c7439;p=nageru diff --git a/video_encoder.cpp b/video_encoder.cpp index 8fd9723..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,13 +35,24 @@ 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(); - quicksync_encoder.reset(new QuickSyncEncoder(surface, va_display, width, height, stream_mux.get())); - quicksync_encoder->open_output_file(generate_local_dump_filename(/*frame=*/0).c_str()); + if (global_flags.stream_audio_codec_name.empty()) { + stream_audio_encoder.reset(new AudioEncoder(AUDIO_OUTPUT_CODEC_NAME, DEFAULT_AUDIO_OUTPUT_BIT_RATE)); + } else { + stream_audio_encoder.reset(new AudioEncoder(global_flags.stream_audio_codec_name, global_flags.stream_audio_codec_bitrate)); + } + 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, resource_pool, surface, va_display, width, height, stream_mux.get(), stream_audio_encoder.get(), x264_encoder.get())); } VideoEncoder::~VideoEncoder() @@ -52,10 +65,8 @@ void VideoEncoder::do_cut(int frame) { string filename = generate_local_dump_filename(frame); printf("Starting new recording: %s\n", filename.c_str()); - quicksync_encoder->close_output_file(); quicksync_encoder->shutdown(); - quicksync_encoder.reset(new QuickSyncEncoder(surface, va_display, width, height, stream_mux.get())); - quicksync_encoder->open_output_file(filename.c_str()); + 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)