summaryrefslogtreecommitdiffstats
path: root/audio/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/audio.c')
-rw-r--r--audio/audio.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/audio/audio.c b/audio/audio.c
index 306401b5a4..710cc03193 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -394,12 +394,9 @@ fail:
return NULL;
}
-// Returns NULL on failure. The input is always unreffed.
-struct AVFrame *mp_audio_to_avframe_and_unref(struct mp_audio *frame)
+int mp_audio_to_avframe(struct mp_audio *frame, struct AVFrame *avframe)
{
- struct AVFrame *avframe = av_frame_alloc();
- if (!avframe)
- goto fail;
+ av_frame_unref(avframe);
avframe->nb_samples = frame->samples;
avframe->format = af_to_avformat(frame->format);
@@ -457,6 +454,23 @@ struct AVFrame *mp_audio_to_avframe_and_unref(struct mp_audio *frame)
avframe = tmp;
}
+ return 0;
+
+fail:
+ av_frame_unref(avframe);
+ return -1;
+}
+
+// Returns NULL on failure. The input is always unreffed.
+struct AVFrame *mp_audio_to_avframe_and_unref(struct mp_audio *frame)
+{
+ struct AVFrame *avframe = av_frame_alloc();
+ if (!avframe)
+ goto fail;
+
+ if (mp_audio_to_avframe(frame, avframe) < 0)
+ goto fail;
+
talloc_free(frame);
return avframe;