- AVPacket pkt;
- av_init_packet(&pkt);
- pkt.data = nullptr;
- pkt.size = 0;
- int got_output = 0;
- avcodec_encode_audio2(ctx, &pkt, audio_frame, &got_output);
- if (got_output) {
- pkt.stream_index = 1;
- pkt.flags = 0;
- for (Mux *mux : muxes) {
- mux->add_packet(pkt, pkt.pts, pkt.dts);
+ int err = avcodec_send_frame(ctx, audio_frame);
+ if (err < 0) {
+ fprintf(stderr, "avcodec_send_frame() failed with error %d\n", err);
+ exit(1);
+ }
+
+ for ( ;; ) { // Termination condition within loop.
+ AVPacket pkt;
+ av_init_packet(&pkt);
+ pkt.data = nullptr;
+ pkt.size = 0;
+ int err = avcodec_receive_packet(ctx, &pkt);
+ if (err == 0) {
+ pkt.stream_index = 1;
+ pkt.flags = 0;
+ for (Mux *mux : muxes) {
+ mux->add_packet(pkt, pkt.pts, pkt.dts);
+ }
+ av_packet_unref(&pkt);
+ } else if (err == AVERROR(EAGAIN)) {
+ break;
+ } else {
+ fprintf(stderr, "avcodec_receive_frame() failed with error %d\n", err);
+ exit(1);