#include <utility>
#include "context.h"
+#include "defs.h"
#include "httpd.h"
#include "timebase.h"
static int frame_height = 144;
static int frame_width_mbaligned;
static int frame_height_mbaligned;
-static int frame_rate = 60;
+static int frame_rate = FPS;
static unsigned int frame_bitrate = 0;
static unsigned int frame_slices = 1;
static double frame_size = 0;
//static int initial_qp = 28;
static int minimal_qp = 0;
static int intra_period = 30;
-static int intra_idr_period = 60;
+static int intra_idr_period = FPS;
static int ip_period = 3;
static int rc_mode = -1;
static int rc_default_modes[] = {
AVFrame *frame = avcodec_alloc_frame();
frame->nb_samples = audio.size() / 2;
- frame->format = AV_SAMPLE_FMT_FLT;
+ frame->format = AV_SAMPLE_FMT_S32;
frame->channel_layout = AV_CH_LAYOUT_STEREO;
- unique_ptr<float[]> planar_samples(new float[audio.size()]);
- avcodec_fill_audio_frame(frame, 2, AV_SAMPLE_FMT_FLTP, (const uint8_t*)planar_samples.get(), audio.size() * sizeof(float), 0);
- for (int i = 0; i < frame->nb_samples; ++i) {
- planar_samples[i] = audio[i * 2 + 0];
- planar_samples[i + frame->nb_samples] = audio[i * 2 + 1];
+ unique_ptr<int32_t[]> int_samples(new int32_t[audio.size()]);
+ avcodec_fill_audio_frame(frame, 2, AV_SAMPLE_FMT_S32, (const uint8_t*)int_samples.get(), audio.size() * sizeof(int32_t), 0);
+ for (int i = 0; i < frame->nb_samples * 2; ++i) {
+ if (audio[i] >= 1.0f) {
+ int_samples[i] = 2147483647;
+ } else if (audio[i] <= -1.0f) {
+ int_samples[i] = -2147483647;
+ } else {
+ int_samples[i] = lrintf(audio[i] * 2147483647.0f);
+ }
}
AVPacket pkt;
}
// TODO: Delayed frames.
avcodec_free_frame(&frame);
+ av_free_packet(&pkt);
}
#if 0
H264Encoder::H264Encoder(QSurface *surface, int width, int height, HTTPD *httpd)
: current_storage_frame(0), surface(surface), httpd(httpd)
{
- AVCodec *codec_audio = avcodec_find_encoder(AV_CODEC_ID_MP3);
+ AVCodec *codec_audio = avcodec_find_encoder(AUDIO_OUTPUT_CODEC);
context_audio = avcodec_alloc_context3(codec_audio);
- context_audio->bit_rate = 256000;
- context_audio->sample_rate = 48000;
- context_audio->sample_fmt = AV_SAMPLE_FMT_FLTP;
+ context_audio->bit_rate = AUDIO_OUTPUT_BIT_RATE;
+ context_audio->sample_rate = OUTPUT_FREQUENCY;
+ context_audio->sample_fmt = AUDIO_OUTPUT_SAMPLE_FMT;
context_audio->channels = 2;
context_audio->channel_layout = AV_CH_LAYOUT_STEREO;
context_audio->time_base = AVRational{1, TIMEBASE};