Beispiel #1
0
static void gst_imx_vpu_encoder_base_close(GstImxVpuEncoderBase *vpu_encoder_base)
{
	ImxVpuEncReturnCodes ret;

	if (vpu_encoder_base->encoder == NULL)
		return;

	GST_DEBUG_OBJECT(vpu_encoder_base, "closing encoder");

	if (vpu_encoder_base->internal_input_bufferpool != NULL)
	{
		gst_object_unref(vpu_encoder_base->internal_input_bufferpool);
		vpu_encoder_base->internal_input_bufferpool = NULL;
	}

	if (vpu_encoder_base->internal_input_buffer != NULL)
	{
		gst_buffer_unref(vpu_encoder_base->internal_input_buffer);
		vpu_encoder_base->internal_input_buffer = NULL;
	}

	if ((ret = imx_vpu_enc_close(vpu_encoder_base->encoder)) != IMX_VPU_ENC_RETURN_CODE_OK)
		GST_ERROR_OBJECT(vpu_encoder_base, "error while closing encoder: %s", imx_vpu_enc_error_string(ret));

	if (vpu_encoder_base->framebuffer_array != NULL)
	{
		gst_object_unref(GST_OBJECT(vpu_encoder_base->framebuffer_array));
		vpu_encoder_base->framebuffer_array = NULL;
	}

	vpu_encoder_base->encoder = NULL;
}
Beispiel #2
0
static ImxVpuEncReturnCodes imx_vpu_jpeg_enc_close_internal(ImxVpuJPEGEncoder *jpeg_encoder)
{
	assert(jpeg_encoder != NULL);

	if (jpeg_encoder->encoder != NULL)
	{
		imx_vpu_enc_close(jpeg_encoder->encoder);
		jpeg_encoder->encoder = NULL;
	}

	imx_vpu_jpeg_enc_deallocate_framebuffers(jpeg_encoder);

	return IMX_VPU_ENC_RETURN_CODE_OK;
}
void shutdown(Context *ctx)
{
	unsigned int i;

	imx_vpu_enc_close(ctx->vpuenc);

	imx_vpu_dma_buffer_deallocate(ctx->input_fb_dmabuffer);
	imx_vpu_dma_buffer_deallocate(ctx->output_dmabuffer);

	free(ctx->framebuffers);
	for (i = 0; i < ctx->num_framebuffers; ++i)
		imx_vpu_dma_buffer_deallocate(ctx->fb_dmabuffers[i]);
	free(ctx->fb_dmabuffers);
	imx_vpu_dma_buffer_deallocate(ctx->bitstream_buffer);

	imx_vpu_enc_unload();

	free(ctx);
}
void shutdown(Context *ctx)
{
	unsigned int i;

	/* Close the previously opened encoder instance */
	imx_vpu_enc_close(ctx->vpuenc);

	/* Free all allocated memory (both regular and DMA memory) */
	imx_vpu_dma_buffer_deallocate(ctx->input_fb_dmabuffer);
	free(ctx->framebuffers);
	for (i = 0; i < ctx->num_framebuffers; ++i)
		imx_vpu_dma_buffer_deallocate(ctx->fb_dmabuffers[i]);
	free(ctx->fb_dmabuffers);
	imx_vpu_dma_buffer_deallocate(ctx->bitstream_buffer);

	/* Unload the VPU firmware */
	imx_vpu_enc_unload();

	free(ctx);
}