gboolean gst_imx_vpu_decoder_load() { gboolean ret; g_mutex_lock(&load_mutex); imx_vpu_setup_heap_allocator_functions(); ret = (imx_vpu_dec_load() == IMX_VPU_DEC_RETURN_CODE_OK); g_mutex_unlock(&load_mutex); return ret; }
ImxVpuDecReturnCodes imx_vpu_jpeg_dec_open(ImxVpuJPEGDecoder **jpeg_decoder, ImxVpuDMABufferAllocator *dma_buffer_allocator, unsigned int num_extra_framebuffers) { ImxVpuDecOpenParams open_params; ImxVpuDecReturnCodes ret = IMX_VPU_DEC_RETURN_CODE_OK; ImxVpuJPEGDecoder *jpegdec = NULL; assert(jpeg_decoder != NULL); if ((ret = imx_vpu_dec_load()) != IMX_VPU_DEC_RETURN_CODE_OK) return ret; jpegdec = IMX_VPU_ALLOC(sizeof(ImxVpuJPEGDecoder)); if (jpegdec == NULL) { IMX_VPU_ERROR("allocating memory for JPEG decoder object failed"); return IMX_VPU_DEC_RETURN_CODE_ERROR; } memset(jpegdec, 0, sizeof(ImxVpuJPEGDecoder)); jpegdec->dma_buffer_allocator = (dma_buffer_allocator != NULL) ? dma_buffer_allocator : imx_vpu_dec_get_default_allocator(); jpegdec->num_extra_framebuffers = num_extra_framebuffers; memset(&open_params, 0, sizeof(open_params)); open_params.codec_format = IMX_VPU_CODEC_FORMAT_MJPEG; open_params.frame_width = 0; open_params.frame_height = 0; imx_vpu_dec_get_bitstream_buffer_info(&(jpegdec->bitstream_buffer_size), &(jpegdec->bitstream_buffer_alignment)); jpegdec->bitstream_buffer = imx_vpu_dma_buffer_allocate(jpegdec->dma_buffer_allocator, jpegdec->bitstream_buffer_size, jpegdec->bitstream_buffer_alignment, 0); if (jpegdec->bitstream_buffer == NULL) { IMX_VPU_ERROR("could not allocate DMA buffer for bitstream buffer with %u bytes and alignment %u", jpegdec->bitstream_buffer_size, jpegdec->bitstream_buffer_alignment); ret = IMX_VPU_DEC_RETURN_CODE_ERROR; goto error; } if ((ret = imx_vpu_dec_open(&(jpegdec->decoder), &open_params, jpegdec->bitstream_buffer, initial_info_callback, jpegdec)) != IMX_VPU_DEC_RETURN_CODE_OK) goto error; *jpeg_decoder = jpegdec; return IMX_VPU_DEC_RETURN_CODE_OK; error: if (jpegdec != NULL) { if (jpegdec->bitstream_buffer != NULL) imx_vpu_dma_buffer_deallocate(jpegdec->bitstream_buffer); IMX_VPU_FREE(jpegdec, sizeof(ImxVpuJPEGDecoder)); } return ret; }
Context* init(FILE *input_file, FILE *output_file) { Context *ctx; ImxVpuDecOpenParams open_params; ctx = calloc(1, sizeof(Context)); ctx->fin = input_file; ctx->fout = output_file; open_params.codec_format = IMX_VPU_CODEC_FORMAT_MJPEG; open_params.frame_width = 0; open_params.frame_height = 0; imx_vpu_dec_load(); imx_vpu_dec_get_bitstream_buffer_info(&(ctx->bitstream_buffer_size), &(ctx->bitstream_buffer_alignment)); ctx->bitstream_buffer = imx_vpu_dma_buffer_allocate(imx_vpu_dec_get_default_allocator(), ctx->bitstream_buffer_size, ctx->bitstream_buffer_alignment, 0); imx_vpu_dec_open(&(ctx->vpudec), &open_params, ctx->bitstream_buffer); return ctx; }