/***************************************************************************** * This file is part of Kvazaar HEVC encoder. * * Copyright (C) 2013-2015 Tampere University of Technology and others (see * COPYING file). * * Kvazaar is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the * Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. * * Kvazaar is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with Kvazaar. If not, see . ****************************************************************************/ #include "videoframe.h" #include #include "image.h" #include "sao.h" #include "alf.h" /** * \brief Allocate new frame * \param pic picture pointer * \return picture pointer */ videoframe_t * kvz_videoframe_alloc(int32_t width, int32_t height, enum kvz_chroma_format chroma_format, enum kvz_alf alf_type) { videoframe_t *frame = calloc(1, sizeof(videoframe_t)); if (!frame) return 0; frame->width = width; frame->height = height; frame->width_in_lcu = CEILDIV(frame->width, LCU_WIDTH); frame->height_in_lcu = CEILDIV(frame->height, LCU_WIDTH); frame->sao_luma = MALLOC(sao_info_t, frame->width_in_lcu * frame->height_in_lcu); if (chroma_format != KVZ_CSP_400) { frame->sao_chroma = MALLOC(sao_info_t, frame->width_in_lcu * frame->height_in_lcu); } if (alf_type) { frame->alf_info = MALLOC(alf_info_t, 1); kvz_alf_create(frame, chroma_format); } return frame; } /** * \brief Free memory allocated to frame * \param pic picture pointer * \return 1 on success, 0 on failure */ int kvz_videoframe_free(videoframe_t * const frame) { if (frame->source_lmcs_mapped) { if(frame->source != frame->source_lmcs) FREE_POINTER(frame->source_lmcs); if (frame->rec != frame->rec_lmcs) FREE_POINTER(frame->rec_lmcs); frame->source_lmcs_mapped = false; } kvz_image_free(frame->source); frame->source = NULL; kvz_image_free(frame->rec); frame->rec = NULL; frame->source_lmcs = NULL; frame->rec_lmcs = NULL; kvz_cu_array_free(&frame->cu_array); FREE_POINTER(frame->sao_luma); FREE_POINTER(frame->sao_chroma); if (frame->alf_info) { kvz_alf_destroy(frame); FREE_POINTER(frame->alf_info); } free(frame); return 1; } void kvz_videoframe_set_poc(videoframe_t * const frame, const int32_t poc) { frame->poc = poc; }