[MPlayer-dev-eng] [PATCH 3/6] av_helpers: switch to new lavc audio encode API.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sun Dec 20 19:50:31 EET 2020


---
 av_helpers.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/av_helpers.c b/av_helpers.c
index 56dc71cf3..2d543b314 100644
--- a/av_helpers.c
+++ b/av_helpers.c
@@ -98,7 +98,6 @@ void init_avcodec(void)
     if (!avcodec_initialized) {
         show_av_version(MSGT_DECVIDEO, "libavcodec", LIBAVCODEC_VERSION_INT,
                         avcodec_version(), avcodec_configuration());
-        avcodec_register_all();
         avcodec_initialized = 1;
         av_log_set_callback(mp_msp_av_log_callback);
     }
@@ -109,7 +108,6 @@ void init_avformat(void)
     if (!avformat_initialized) {
         show_av_version(MSGT_DEMUX, "libavformat", LIBAVFORMAT_VERSION_INT,
                         avformat_version(), avformat_configuration());
-        av_register_all();
         avformat_initialized = 1;
         av_log_set_callback(mp_msp_av_log_callback);
     }
@@ -132,8 +130,6 @@ int lavc_encode_audio(AVCodecContext *ctx, void *src, int src_len, void *dst, in
                             ctx->channels,
                             src_len / bps, bps);
     }
-    pkt.data = dst;
-    pkt.size = dst_len;
     frame->nb_samples = src_len / ctx->channels / bps;
     if (planar) {
         // TODO: this is horribly inefficient.
@@ -150,11 +146,22 @@ int lavc_encode_audio(AVCodecContext *ctx, void *src, int src_len, void *dst, in
             }
         }
     }
+    frame->format = ctx->sample_fmt;
+    frame->channels = ctx->channels;
     n = avcodec_fill_audio_frame(frame, ctx->channels, ctx->sample_fmt, src, src_len, 1);
     if (n < 0) return 0;
-    n = avcodec_encode_audio2(ctx, &pkt, frame, &got);
+    n = avcodec_send_frame(ctx, frame);
+    av_init_packet(&pkt);
+    got = avcodec_receive_packet(ctx, &pkt);
     av_frame_free(&frame);
     if (planar) av_free(src);
     if (n < 0) return n;
-    return got ? pkt.size : 0;
+    if (got >= 0) {
+        int size = pkt.size;
+        if (size > dst_len) return -1;
+        memcpy(dst, pkt.data, size);
+        av_packet_unref(&pkt);
+        return size;
+    }
+    return 0;
 }
--
2.29.2



More information about the MPlayer-dev-eng mailing list