diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-07-27 18:20:29 +0300 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-07-27 18:21:14 +0300 |
commit | aaf937ee3557bfb99c2ad298591b22a7f22ecbf7 (patch) | |
tree | 006f1f0ce9e467123ee03266fb4457ed35094333 /libavcodec | |
parent | 3ee217853a6741b829a2683f49c590618891b1ab (diff) |
hap: Add utility functions file
Missing from the push of 3ee217853a6741b829a2683f49c590618891b1ab.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/hap.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/libavcodec/hap.c b/libavcodec/hap.c new file mode 100644 index 0000000000..770142cd42 --- /dev/null +++ b/libavcodec/hap.c @@ -0,0 +1,55 @@ +/* + * Vidvox Hap utility functions + * Copyright (C) 2015 Tom Butterworth <bangnoise@gmail.com> + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Lesser General Public + * License along with Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * Hap utilities + */ +#include "hap.h" + +int ff_hap_set_chunk_count(HapContext *ctx, int count, int first_in_frame) +{ + int ret = 0; + if (first_in_frame == 1 && ctx->chunk_count != count) { + int ret = av_reallocp_array(&ctx->chunks, count, sizeof(HapChunk)); + if (ret == 0) + ret = av_reallocp_array(&ctx->chunk_results, count, sizeof(int)); + if (ret < 0) { + ctx->chunk_count = 0; + } else { + ctx->chunk_count = count; + } + } else if (ctx->chunk_count != count) { + /* If this is not the first chunk count calculated for a frame and a + * different count has already been encountered, then reject the frame: + * each table in the Decode Instructions Container must describe the + * same number of chunks. */ + ret = AVERROR_INVALIDDATA; + } + return ret; +} + +av_cold void ff_hap_free_context(HapContext *ctx) +{ + av_freep(&ctx->tex_buf); + av_freep(&ctx->chunks); + av_freep(&ctx->chunk_results); +} |