]> git.sesse.net Git - nageru/blobdiff - kaeru.cpp
Release Nageru 1.7.4.
[nageru] / kaeru.cpp
index dd91239c7b0e081cc706eedfd90c3e7bcdd6d313..4ae8b137c75d94ba132c419d80a8a4241395dc74 100644 (file)
--- a/kaeru.cpp
+++ b/kaeru.cpp
@@ -1,5 +1,4 @@
 // Kaeru (換える), a simple transcoder intended for use with Nageru.
-// This is experimental code, not yet supported.
 
 #include "audio_encoder.h"
 #include "basic_stats.h"
@@ -50,7 +49,7 @@ int write_packet(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType ty
                stream_mux_header.append((char *)buf, buf_size);
                httpd->set_header(stream_mux_header);
        } else {
-               httpd->add_data((char *)buf, buf_size, type == AVIO_DATA_MARKER_SYNC_POINT);
+               httpd->add_data((char *)buf, buf_size, type == AVIO_DATA_MARKER_SYNC_POINT, time, AVRational{ AV_TIME_BASE, 1 });
        }
        return buf_size;
 }
@@ -69,8 +68,7 @@ unique_ptr<Mux> create_mux(HTTPD *httpd, AVOutputFormat *oformat, X264Encoder *x
        string video_extradata = x264_encoder->get_global_headers();
 
        unique_ptr<Mux> mux;
-       int time_base = global_flags.stream_coarse_timebase ? COARSE_TIMEBASE : TIMEBASE;
-       mux.reset(new Mux(avctx, global_flags.width, global_flags.height, Mux::CODEC_H264, video_extradata, audio_encoder->get_codec_parameters().get(), time_base,
+       mux.reset(new Mux(avctx, global_flags.width, global_flags.height, Mux::CODEC_H264, video_extradata, audio_encoder->get_codec_parameters().get(), COARSE_TIMEBASE,
                /*write_callback=*/nullptr, Mux::WRITE_FOREGROUND, { &stream_mux_metrics }));
        stream_mux_metrics.init({{ "destination", "http" }});
        return mux;
@@ -130,7 +128,7 @@ void video_frame_callback(FFmpegCapture *video, X264Encoder *x264_encoder, Audio
 
 void audio_frame_callback(Mux *mux, const AVPacket *pkt, AVRational timebase)
 {
-       mux->add_packet(*pkt, pkt->pts, pkt->dts == AV_NOPTS_VALUE ? pkt->pts : pkt->dts, timebase);
+       mux->add_packet(*pkt, pkt->pts, pkt->dts == AV_NOPTS_VALUE ? pkt->pts : pkt->dts, timebase, /*stream_index=*/1);
 }
 
 void adjust_bitrate(int signal)
@@ -149,10 +147,10 @@ void adjust_bitrate(int signal)
        } else if (signal == SIGUSR2) {
                new_bitrate -= 100;
                if (new_bitrate < 100) {
-                       fprintf(stderr, "Ignoring SIGUSR1, can't decrease bitrate below 100 kbit/sec (currently at %d kbit/sec)\n",
+                       fprintf(stderr, "Ignoring SIGUSR2, can't decrease bitrate below 100 kbit/sec (currently at %d kbit/sec)\n",
                                global_flags.x264_bitrate);
                } else {
-                       fprintf(stderr, "Decreasing bitrate to %d kbit/sec due to SIGUSR1.\n", new_bitrate);
+                       fprintf(stderr, "Decreasing bitrate to %d kbit/sec due to SIGUSR2.\n", new_bitrate);
                        global_flags.x264_bitrate = new_bitrate;
                        global_x264_encoder->change_bitrate(new_bitrate);
                }
@@ -182,12 +180,10 @@ int main(int argc, char *argv[])
        assert(oformat != nullptr);
 
        unique_ptr<AudioEncoder> audio_encoder;
-       if (global_flags.transcode_audio) {
-               if (global_flags.stream_audio_codec_name.empty()) {
-                       audio_encoder.reset(new AudioEncoder(AUDIO_OUTPUT_CODEC_NAME, DEFAULT_AUDIO_OUTPUT_BIT_RATE, oformat));
-               } else {
-                       audio_encoder.reset(new AudioEncoder(global_flags.stream_audio_codec_name, global_flags.stream_audio_codec_bitrate, oformat));
-               }
+       if (global_flags.stream_audio_codec_name.empty()) {
+               audio_encoder.reset(new AudioEncoder(AUDIO_OUTPUT_CODEC_NAME, DEFAULT_AUDIO_OUTPUT_BIT_RATE, oformat));
+       } else {
+               audio_encoder.reset(new AudioEncoder(global_flags.stream_audio_codec_name, global_flags.stream_audio_codec_bitrate, oformat));
        }
 
        unique_ptr<X264Encoder> x264_encoder(new X264Encoder(oformat));
@@ -208,9 +204,9 @@ int main(int argc, char *argv[])
        video.start_bm_capture();
        video.change_rate(2.0);  // Be sure never to really fall behind, but also don't dump huge amounts of stuff onto x264.
 
-       BasicStats basic_stats(/*verbose=*/false);
+       BasicStats basic_stats(/*verbose=*/false, /*use_opengl=*/false);
        global_basic_stats = &basic_stats;
-       httpd.start(9095);
+       httpd.start(global_flags.http_port);
 
        signal(SIGUSR1, adjust_bitrate);
        signal(SIGUSR2, adjust_bitrate);