php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
avifinfo.h
Go to the documentation of this file.
1// Copyright (c) 2021, Alliance for Open Media. All rights reserved
2//
3// This source code is subject to the terms of the BSD 2 Clause License and
4// the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
5// was not distributed with this source code in the LICENSE file, you can
6// obtain it at www.aomedia.org/license/software. If the Alliance for Open
7// Media Patent License 1.0 was not distributed with this source code in the
8// PATENTS file, you can obtain it at www.aomedia.org/license/patent.
9
10#ifndef AVIFINFO_H_
11#define AVIFINFO_H_
12
13#include <stddef.h>
14#include <stdint.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20//------------------------------------------------------------------------------
21
22typedef enum {
23 kAvifInfoOk, // The file was correctly parsed and the requested
24 // information was extracted. It is not guaranteed
25 // that the input bitstream is a valid complete
26 // AVIF file.
27 kAvifInfoNotEnoughData, // The input bitstream was correctly parsed until
28 // now but bytes are missing. The request should be
29 // repeated with more input bytes.
30 kAvifInfoTooComplex, // The input bitstream was correctly parsed until
31 // now but it is too complex. The parsing was
32 // stopped to avoid any timeout or crash.
33 kAvifInfoInvalidFile, // The input bitstream is not a valid AVIF file,
34 // truncated or not.
36
37typedef struct {
38 uint32_t width, height; // In number of pixels. Ignores mirror and rotation.
39 uint32_t bit_depth; // Likely 8, 10 or 12 bits per channel per pixel.
40 uint32_t num_channels; // Likely 1, 2, 3 or 4 channels:
41 // (1 monochrome or 3 colors) + (0 or 1 alpha)
43
44//------------------------------------------------------------------------------
45// Fixed-size input API
46// Use this API if a raw byte array of fixed size is available as input.
47
48// Parses the 'data' and returns kAvifInfoOk if it is identified as an AVIF.
49// The file type can be identified in the first 12 bytes of most AVIF files.
50AvifInfoStatus AvifInfoIdentify(const uint8_t* data, size_t data_size);
51
52// Parses the identified AVIF 'data' and extracts its 'features'.
53// 'data' can be partial but must point to the beginning of the AVIF file.
54// The 'features' can be parsed in the first 450 bytes of most AVIF files.
55// 'features' are set to 0 unless kAvifInfoOk is returned.
56AvifInfoStatus AvifInfoGetFeatures(const uint8_t* data, size_t data_size,
58
59//------------------------------------------------------------------------------
60// Streamed input API
61// Use this API if the input bytes must be fetched and/or if the AVIF payload
62// size is unknown. Implement the two function signatures below and pass them to
63// AvifInfoRead*() with a 'stream', which can be anything (file, struct etc.).
64
65// Reads 'num_bytes' from the 'stream'.
66// The position in the 'stream' must be advanced by 'num_bytes'.
67// Returns a pointer to the 'num_bytes' or null if it cannot be fulfilled.
68// The returned data must remain valid until the next read.
69typedef const uint8_t* (*read_stream_t)(void* stream, size_t num_bytes);
70// Advances the position in the 'stream' by 'num_bytes'.
71typedef void (*skip_stream_t)(void* stream, size_t num_bytes);
72
73// Maximum number of bytes requested per read. There is no limit per skip.
74#define AVIFINFO_MAX_NUM_READ_BYTES 64
75
76// Same as AvifInfo*() but takes a 'stream' as input. AvifInfo*Stream() does
77// not access the 'stream' directly but passes it as is to 'read' and 'skip'.
78// 'read' cannot be null. If 'skip' is null, 'read' is called instead.
80 skip_stream_t skip);
81// Can be called right after AvifInfoIdentifyStream() with the same 'stream'.
83 skip_stream_t skip,
85
86//------------------------------------------------------------------------------
87
88#ifdef __cplusplus
89} // extern "C"
90#endif
91
92#endif // AVIFINFO_H_
AvifInfoStatus
Definition avifinfo.h:22
@ kAvifInfoInvalidFile
Definition avifinfo.h:33
@ kAvifInfoOk
Definition avifinfo.h:23
@ kAvifInfoTooComplex
Definition avifinfo.h:30
@ kAvifInfoNotEnoughData
Definition avifinfo.h:27
AvifInfoStatus AvifInfoIdentify(const uint8_t *data, size_t data_size)
Definition avifinfo.c:689
const uint8_t *(* read_stream_t)(void *stream, size_t num_bytes)
Definition avifinfo.h:69
AvifInfoStatus AvifInfoIdentifyStream(void *stream, read_stream_t read, skip_stream_t skip)
Definition avifinfo.c:712
AvifInfoStatus AvifInfoGetFeaturesStream(void *stream, read_stream_t read, skip_stream_t skip, AvifInfoFeatures *features)
Definition avifinfo.c:723
void(* skip_stream_t)(void *stream, size_t num_bytes)
Definition avifinfo.h:71
AvifInfoStatus AvifInfoGetFeatures(const uint8_t *data, size_t data_size, AvifInfoFeatures *features)
Definition avifinfo.c:699
int features
Definition php_soap.h:172
zend_constant * data
uint32_t num_channels
Definition avifinfo.h:40
uint32_t width
Definition avifinfo.h:38
uint32_t height
Definition avifinfo.h:38
uint32_t bit_depth
Definition avifinfo.h:39
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)