FFmpeg
Loading...
Searching...
No Matches
hap.c
Go to the documentation of this file.
1/*
2 * Vidvox Hap utility functions
3 * Copyright (C) 2015 Tom Butterworth <bangnoise@gmail.com>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * Hap utilities
25 */
26#include "libavutil/mem.h"
27#include "hap.h"
28
29int ff_hap_set_chunk_count(HapContext *ctx, int count, int first_in_frame)
30{
31 int ret = 0;
32 if (first_in_frame == 1 && ctx->chunk_count != count) {
33 int ret = av_reallocp_array(&ctx->chunks, count, sizeof(HapChunk));
34 if (ret == 0)
35 ret = av_reallocp_array(&ctx->chunk_results, count, sizeof(int));
36 if (ret < 0) {
37 ctx->chunk_count = 0;
38 } else {
39 ctx->chunk_count = count;
40 }
41 } else if (ctx->chunk_count != count) {
42 /* If this is not the first chunk count calculated for a frame and a
43 * different count has already been encountered, then reject the frame:
44 * each table in the Decode Instructions Container must describe the
45 * same number of chunks. */
47 }
48 return ret;
49}
50
52{
53 av_freep(&ctx->tex_buf);
54 av_freep(&ctx->chunks);
55 av_freep(&ctx->chunk_results);
56}
57
58int ff_hap_parse_section_header(GetByteContext *gbc, int *section_size,
59 enum HapSectionType *section_type)
60{
61 if (bytestream2_get_bytes_left(gbc) < 4)
63
64 *section_size = bytestream2_get_le24(gbc);
65 *section_type = bytestream2_get_byte(gbc);
66
67 if (*section_size == 0) {
68 if (bytestream2_get_bytes_left(gbc) < 4)
70
71 *section_size = bytestream2_get_le32(gbc);
72 }
73
74 if (*section_size > bytestream2_get_bytes_left(gbc) || *section_size < 0)
76 else
77 return 0;
78}
static AVFormatContext * ctx
static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
Definition bytestream.h:158
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate an array through a pointer to a pointer.
Definition mem.c:225
av_cold void ff_hap_free_context(HapContext *ctx)
Definition hap.c:51
int ff_hap_set_chunk_count(HapContext *ctx, int count, int first_in_frame)
Definition hap.c:29
int ff_hap_parse_section_header(GetByteContext *gbc, int *section_size, enum HapSectionType *section_type)
Definition hap.c:58
HapSectionType
Definition hap.h:45
#define av_cold
Definition attributes.h:117
Memory handling functions.
Definition hap.h:52
#define av_freep(p)