- /* prepare packet for muxing */
- enc_pkt.stream_index = stream_index;
- av_packet_rescale_ts(&enc_pkt,
- stream_ctx[stream_index].enc_ctx->time_base,
- ofmt_ctx->streams[stream_index]->time_base);
+ while (ret >= 0) {
+ ret = avcodec_receive_packet(stream->enc_ctx, enc_pkt);
+
+ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
+ return 0;
+
+ /* prepare packet for muxing */
+ enc_pkt->stream_index = stream_index;
+ av_packet_rescale_ts(enc_pkt,
+ stream->enc_ctx->time_base,
+ ofmt_ctx->streams[stream_index]->time_base);
+
+ av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n");
+ /* mux encoded frame */
+ ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt);
+ }