static void default_logging_fn(ImxVpuLogLevel level, char const *file, int const line, char const *fn, const char *format, ...) { IMXVPUAPI_UNUSED_PARAM(level); IMXVPUAPI_UNUSED_PARAM(file); IMXVPUAPI_UNUSED_PARAM(line); IMXVPUAPI_UNUSED_PARAM(fn); IMXVPUAPI_UNUSED_PARAM(format); }
static void default_heap_free_fn(void *memblock, size_t const size, void *context) { IMXVPUAPI_UNUSED_PARAM(context); IMXVPUAPI_UNUSED_PARAM(size); free(memblock); }
static void* default_heap_alloc_fn(size_t const size, void *context) { IMXVPUAPI_UNUSED_PARAM(context); return malloc(size); }
static int initial_info_callback(ImxVpuDecoder *decoder, ImxVpuDecInitialInfo *new_initial_info, unsigned int output_code, void *user_data) { unsigned int i; ImxVpuDecReturnCodes ret; ImxVpuJPEGDecoder *jpeg_decoder = (ImxVpuJPEGDecoder *)user_data; IMXVPUAPI_UNUSED_PARAM(decoder); IMXVPUAPI_UNUSED_PARAM(output_code); imx_vpu_jpeg_dec_deallocate_framebuffers(jpeg_decoder); jpeg_decoder->initial_info = *new_initial_info; IMX_VPU_DEBUG( "initial info: size: %ux%u pixel rate: %u/%u min num required framebuffers: %u interlacing: %d framebuffer alignment: %u color format: %s", new_initial_info->frame_width, new_initial_info->frame_height, new_initial_info->frame_rate_numerator, new_initial_info->frame_rate_denominator, new_initial_info->min_num_required_framebuffers, new_initial_info->interlacing, new_initial_info->framebuffer_alignment, imx_vpu_color_format_string(new_initial_info->color_format) ); jpeg_decoder->num_framebuffers = new_initial_info->min_num_required_framebuffers + jpeg_decoder->num_extra_framebuffers; imx_vpu_calc_framebuffer_sizes(new_initial_info->color_format, new_initial_info->frame_width, new_initial_info->frame_height, new_initial_info->framebuffer_alignment, new_initial_info->interlacing, 0, &(jpeg_decoder->calculated_sizes)); IMX_VPU_DEBUG( "calculated sizes: frame width&height: %dx%d Y stride: %u CbCr stride: %u Y size: %u CbCr size: %u MvCol size: %u total size: %u", jpeg_decoder->calculated_sizes.aligned_frame_width, jpeg_decoder->calculated_sizes.aligned_frame_height, jpeg_decoder->calculated_sizes.y_stride, jpeg_decoder->calculated_sizes.cbcr_stride, jpeg_decoder->calculated_sizes.y_size, jpeg_decoder->calculated_sizes.cbcr_size, jpeg_decoder->calculated_sizes.mvcol_size, jpeg_decoder->calculated_sizes.total_size ); jpeg_decoder->framebuffers = IMX_VPU_ALLOC(sizeof(ImxVpuFramebuffer) * jpeg_decoder->num_framebuffers); jpeg_decoder->fb_dmabuffers = IMX_VPU_ALLOC(sizeof(ImxVpuDMABuffer *) * jpeg_decoder->num_framebuffers); memset(jpeg_decoder->framebuffers, 0, sizeof(ImxVpuFramebuffer) * jpeg_decoder->num_framebuffers); memset(jpeg_decoder->fb_dmabuffers, 0, sizeof(ImxVpuDMABuffer *) * jpeg_decoder->num_framebuffers); for (i = 0; i < jpeg_decoder->num_framebuffers; ++i) { jpeg_decoder->fb_dmabuffers[i] = imx_vpu_dma_buffer_allocate(jpeg_decoder->dma_buffer_allocator, jpeg_decoder->calculated_sizes.total_size, jpeg_decoder->initial_info.framebuffer_alignment, 0); if (jpeg_decoder->fb_dmabuffers[i] == NULL) { IMX_VPU_ERROR("could not allocate DMA buffer for framebuffer #%u", i); goto error; } imx_vpu_fill_framebuffer_params(&(jpeg_decoder->framebuffers[i]), &(jpeg_decoder->calculated_sizes), jpeg_decoder->fb_dmabuffers[i], 0); } if ((ret = imx_vpu_dec_register_framebuffers(jpeg_decoder->decoder, jpeg_decoder->framebuffers, jpeg_decoder->num_framebuffers)) != IMX_VPU_DEC_RETURN_CODE_OK) { IMX_VPU_ERROR("could not register framebuffers: %s", imx_vpu_dec_error_string(ret)); goto error; } return 1; error: imx_vpu_jpeg_deallocate_dma_buffers(jpeg_decoder->fb_dmabuffers, jpeg_decoder->num_framebuffers); return 0; }