{
const AVChannelLayout *channel_layouts =
tvh_codec_profile_audio_get_channel_layouts(self->profile);
- AVChannelLayout ilayout;
+ AVChannelLayout ilayout = {0};
av_channel_layout_copy(&ilayout, &self->iavctx->ch_layout);
AVChannelLayout olayout;
av_channel_layout_default(&olayout, 0);
"audio encoder has no suitable channel layout");
return -1;
}
- self->oavctx->ch_layout.nb_channels = self->oavctx->ch_layout.nb_channels;
#else
self->oavctx->channel_layout = _audio_context_channel_layout(self, opts);
if (!self->oavctx->channel_layout) {
tvherror(LS_VAAPI, "Decode: Failed to Open VAAPI device and create an AVHWDeviceContext for device: "
"%s with error code: %s",
ctx->hw_accel_device, av_err2str(ret));
+ // unref self
+ free(self);
+ self = NULL;
return ret;
}
if (!avctx->hw_device_ctx) {
tvherror(LS_VAAPI, "Decode: Failed to create a hardware device reference for device: %s.",
ctx->hw_accel_device);
+ // unref hw_device_ref
+ av_buffer_unref(&self->hw_device_ref);
+ self->hw_device_ref = NULL;
+ // unref self
+ free(self);
+ self = NULL;
return AVERROR(ENOMEM);
}
ctx->hw_accel_ictx = self;
if ((ret = av_hwdevice_ctx_create(&self->hw_frame_ref, AV_HWDEVICE_TYPE_VAAPI, NULL, NULL, 0)) < 0) {
tvherror(LS_VAAPI, "Encode: Failed to open VAAPI device and create an AVHWDeviceContext for it."
"Error code: %s",av_err2str(ret));
+ // unref self
+ free(self);
+ self = NULL;
return ret;
}
if ((ret = set_hwframe_ctx(avctx, self->hw_frame_ref)) < 0) {
tvherror(LS_VAAPI, "Encode: Failed to set hwframe context."
"Error code: %s",av_err2str(ret));
+ // unref hw_frame_ref
+ av_buffer_unref(&self->hw_frame_ref);
+ self->hw_frame_ref = NULL;
+ // unref self
+ free(self);
+ self = NULL;
return ret;
}
ctx->hw_device_octx = av_buffer_ref(self->hw_frame_ref);