+ vector<float> *audio_queue,
+ int64_t audio_pts,
+ AVCodecContext *ctx)
+{
+ if (ctx->frame_size == 0) {
+ // No queueing needed.
+ assert(audio_queue->empty());
+ assert(audio.size() % 2 == 0);
+ encode_audio_one_frame(&audio[0], audio.size() / 2, audio_pts, ctx);
+ return;
+ }
+
+ audio_queue->insert(audio_queue->end(), audio.begin(), audio.end());
+ size_t sample_num;
+ for (sample_num = 0;
+ sample_num + ctx->frame_size * 2 <= audio_queue->size();
+ sample_num += ctx->frame_size * 2) {
+ encode_audio_one_frame(&(*audio_queue)[sample_num],
+ ctx->frame_size,
+ audio_pts,
+ ctx);
+ }
+ audio_queue->erase(audio_queue->begin(), audio_queue->begin() + sample_num);
+}
+
+void H264EncoderImpl::encode_audio_one_frame(
+ const float *audio,
+ size_t num_samples,