#include "httpd.h"
#include "timebase.h"
#include "quicksync_encoder.h"
+#include "x264_encoder.h"
using namespace std;
+using namespace movit;
namespace {
} // 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()
{
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<float> audio)