summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-06-28 15:37:23 +0200
committerSebastian Dröge <sebastian@centricular.com>2015-06-28 15:37:23 +0200
commitd6b5fc4f340405ee2348ab8a054983f788ebaacf (patch)
treee0afaf9d69c6b0e5936024e5b620b1e586293302
parent2a445cb5f2178ebec2b2e40065934f03d3ab22d8 (diff)
av{aud,vid}enc: Stop using deprecated AVFrame APIs
-rw-r--r--ext/libav/gstavaudenc.c46
-rw-r--r--ext/libav/gstavaudenc.h2
-rw-r--r--ext/libav/gstavvidenc.c4
3 files changed, 27 insertions, 25 deletions
diff --git a/ext/libav/gstavaudenc.c b/ext/libav/gstavaudenc.c
index 0408104..e50109c 100644
--- a/ext/libav/gstavaudenc.c
+++ b/ext/libav/gstavaudenc.c
@@ -179,6 +179,7 @@ gst_ffmpegaudenc_init (GstFFMpegAudEnc * ffmpegaudenc)
/* ffmpeg objects */
ffmpegaudenc->context = avcodec_alloc_context3 (klass->in_plugin);
ffmpegaudenc->opened = FALSE;
+ ffmpegaudenc->frame = av_frame_alloc ();
ffmpegaudenc->compliance = FFMPEG_DEFAULT_COMPLIANCE;
@@ -191,6 +192,7 @@ gst_ffmpegaudenc_finalize (GObject * object)
GstFFMpegAudEnc *ffmpegaudenc = (GstFFMpegAudEnc *) object;
/* clean up remaining allocated data */
+ av_frame_free (&ffmpegaudenc->frame);
gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
av_free (ffmpegaudenc->context);
@@ -423,7 +425,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
GstFlowReturn ret;
GstAudioInfo *info;
AVPacket *pkt;
- AVFrame frame;
+ AVFrame *frame = ffmpegaudenc->frame;
gboolean planar;
enc = GST_AUDIO_ENCODER (ffmpegaudenc);
@@ -436,9 +438,6 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
pkt = g_slice_new0 (AVPacket);
if (audio_in != NULL) {
- memset (&frame, 0, sizeof (frame));
- avcodec_get_frame_defaults (&frame);
-
info = gst_audio_encoder_get_audio_info (enc);
planar = av_sample_fmt_is_planar (ffmpegaudenc->context->sample_fmt);
@@ -446,19 +445,20 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
gint channels, nsamples;
gint i, j;
- nsamples = frame.nb_samples = in_size / info->bpf;
+ nsamples = frame->nb_samples = in_size / info->bpf;
channels = info->channels;
if (info->channels > AV_NUM_DATA_POINTERS) {
- frame.extended_data = g_new (uint8_t *, info->channels);
+ frame->extended_data = g_new (uint8_t *, info->channels);
} else {
- frame.extended_data = frame.data;
+ frame->extended_data = frame->data;
}
- frame.extended_data[0] = g_malloc (in_size);
- frame.linesize[0] = in_size / channels;
+ frame->extended_data[0] = g_malloc (in_size);
+ frame->linesize[0] = in_size / channels;
for (i = 1; i < channels; i++)
- frame.extended_data[i] = frame.extended_data[i - 1] + frame.linesize[0];
+ frame->extended_data[i] =
+ frame->extended_data[i - 1] + frame->linesize[0];
switch (info->finfo->width) {
case 8:{
@@ -466,7 +466,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
for (i = 0; i < nsamples; i++) {
for (j = 0; j < channels; j++) {
- ((guint8 *) frame.extended_data[j])[i] = idata[j];
+ ((guint8 *) frame->extended_data[j])[i] = idata[j];
}
idata += channels;
}
@@ -477,7 +477,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
for (i = 0; i < nsamples; i++) {
for (j = 0; j < channels; j++) {
- ((guint16 *) frame.extended_data[j])[i] = idata[j];
+ ((guint16 *) frame->extended_data[j])[i] = idata[j];
}
idata += channels;
}
@@ -488,7 +488,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
for (i = 0; i < nsamples; i++) {
for (j = 0; j < channels; j++) {
- ((guint32 *) frame.extended_data[j])[i] = idata[j];
+ ((guint32 *) frame->extended_data[j])[i] = idata[j];
}
idata += channels;
}
@@ -500,7 +500,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
for (i = 0; i < nsamples; i++) {
for (j = 0; j < channels; j++) {
- ((guint64 *) frame.extended_data[j])[i] = idata[j];
+ ((guint64 *) frame->extended_data[j])[i] = idata[j];
}
idata += channels;
}
@@ -513,19 +513,19 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
}
} else {
- frame.data[0] = audio_in;
- frame.extended_data = frame.data;
- frame.linesize[0] = in_size;
- frame.nb_samples = in_size / info->bpf;
+ frame->data[0] = audio_in;
+ frame->extended_data = frame->data;
+ frame->linesize[0] = in_size;
+ frame->nb_samples = in_size / info->bpf;
}
/* we have a frame to feed the encoder */
- res = avcodec_encode_audio2 (ctx, pkt, &frame, have_data);
+ res = avcodec_encode_audio2 (ctx, pkt, frame, have_data);
if (planar && info->channels > 1)
- g_free (frame.data[0]);
- if (frame.extended_data != frame.data)
- g_free (frame.extended_data);
+ g_free (frame->data[0]);
+ if (frame->extended_data != frame->data)
+ g_free (frame->extended_data);
} else {
/* flushing the encoder */
@@ -559,7 +559,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
but we have no way to know AFAICT */
ret = gst_audio_encoder_finish_frame (enc, outbuf, -1);
} else {
- ret = gst_audio_encoder_finish_frame (enc, outbuf, frame.nb_samples);
+ ret = gst_audio_encoder_finish_frame (enc, outbuf, frame->nb_samples);
}
} else {
GST_LOG_OBJECT (ffmpegaudenc, "no output produced");
diff --git a/ext/libav/gstavaudenc.h b/ext/libav/gstavaudenc.h
index bce0900..8c97d0d 100644
--- a/ext/libav/gstavaudenc.h
+++ b/ext/libav/gstavaudenc.h
@@ -48,6 +48,8 @@ struct _GstFFMpegAudEnc
* include a context here, rather than copy-and-past it from avcodec.h */
AVCodecContext config;
+ AVFrame *frame;
+
GstAudioChannelPosition ffmpeg_layout[64];
gboolean needs_reorder;
};
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c
index 0e90dc7..8c5d00f 100644
--- a/ext/libav/gstavvidenc.c
+++ b/ext/libav/gstavvidenc.c
@@ -246,7 +246,7 @@ gst_ffmpegvidenc_init (GstFFMpegVidEnc * ffmpegenc)
/* ffmpeg objects */
ffmpegenc->context = avcodec_alloc_context3 (klass->in_plugin);
- ffmpegenc->picture = avcodec_alloc_frame ();
+ ffmpegenc->picture = av_frame_alloc ();
ffmpegenc->opened = FALSE;
ffmpegenc->file = NULL;
@@ -274,9 +274,9 @@ gst_ffmpegvidenc_finalize (GObject * object)
gst_ffmpeg_cfg_finalize (ffmpegenc);
/* clean up remaining allocated data */
+ av_frame_free (&ffmpegenc->picture);
gst_ffmpeg_avcodec_close (ffmpegenc->context);
av_free (ffmpegenc->context);
- avcodec_free_frame (&ffmpegenc->picture);
g_free (ffmpegenc->filename);