DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (56e7b9127e89)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.

#ifdef __cplusplus
extern "C" {
#endif

#ifndef MP4PARSE_CAPI_H
#define MP4PARSE_CAPI_H

// THIS FILE IS AUTOGENERATED BY mp4parse_capi/build.rs - DO NOT EDIT

#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>

typedef enum {
  MP4PARSE_CODEC_UNKNOWN,
  MP4PARSE_CODEC_AAC,
  MP4PARSE_CODEC_FLAC,
  MP4PARSE_CODEC_OPUS,
  MP4PARSE_CODEC_AVC,
  MP4PARSE_CODEC_VP9,
  MP4PARSE_CODEC_AV1,
  MP4PARSE_CODEC_MP3,
  MP4PARSE_CODEC_MP4V,
  MP4PARSE_CODEC_JPEG,
  MP4PARSE_CODEC_AC3,
  MP4PARSE_CODEC_EC3,
  MP4PARSE_CODEC_ALAC,
} Mp4parseCodec;

typedef enum {
  MP4PARSE_STATUS_OK = 0,
  MP4PARSE_STATUS_BAD_ARG = 1,
  MP4PARSE_STATUS_INVALID = 2,
  MP4PARSE_STATUS_UNSUPPORTED = 3,
  MP4PARSE_STATUS_EOF = 4,
  MP4PARSE_STATUS_IO = 5,
  MP4PARSE_STATUS_OOM = 6,
} Mp4parseStatus;

typedef enum {
  MP4PARSE_TRACK_TYPE_VIDEO = 0,
  MP4PARSE_TRACK_TYPE_AUDIO = 1,
  MP4PARSE_TRACK_TYPE_METADATA = 2,
} Mp4parseTrackType;

typedef struct Mp4parseParser Mp4parseParser;

typedef struct {
  uint64_t fragment_duration;
} Mp4parseFragmentInfo;

typedef struct {
  uint64_t start_offset;
  uint64_t end_offset;
  int64_t start_composition;
  int64_t end_composition;
  int64_t start_decode;
  bool sync;
} Mp4parseIndice;

typedef struct {
  uint32_t length;
  const uint8_t *data;
  const Mp4parseIndice *indices;
} Mp4parseByteData;

typedef struct {
  Mp4parseByteData data;
} Mp4parsePsshInfo;

typedef struct {
  uint32_t is_encrypted;
  uint8_t iv_size;
  Mp4parseByteData kid;
} Mp4parseSinfInfo;

typedef struct {
  uint16_t channels;
  uint16_t bit_depth;
  uint32_t sample_rate;
  uint16_t profile;
  Mp4parseByteData codec_specific_config;
  Mp4parseByteData extra_data;
  Mp4parseSinfInfo protected_data;
} Mp4parseTrackAudioInfo;

typedef struct {
  Mp4parseTrackType track_type;
  Mp4parseCodec codec;
  uint32_t track_id;
  uint64_t duration;
  int64_t media_time;
} Mp4parseTrackInfo;

typedef struct {
  uint32_t display_width;
  uint32_t display_height;
  uint16_t image_width;
  uint16_t image_height;
  uint16_t rotation;
  Mp4parseByteData extra_data;
  Mp4parseSinfInfo protected_data;
} Mp4parseTrackVideoInfo;

typedef struct {
  intptr_t (*read)(uint8_t*, uintptr_t, void*);
  void *userdata;
} Mp4parseIo;

// THIS FILE IS AUTOGENERATED BY mp4parse_capi/build.rs - DO NOT EDIT

/*
 * Free an `Mp4parseParser*` allocated by `mp4parse_new()`.
 */
void mp4parse_free(Mp4parseParser *parser);

/*
 * Fill the supplied `Mp4parseFragmentInfo` with metadata from fragmented file.
 */
Mp4parseStatus mp4parse_get_fragment_info(Mp4parseParser *parser, Mp4parseFragmentInfo *info);

Mp4parseStatus mp4parse_get_indice_table(Mp4parseParser *parser,
                                         uint32_t track_id,
                                         Mp4parseByteData *indices);

/*
 * Get 'pssh' system id and 'pssh' box content for eme playback.
 *
 * The data format of the `info` struct passed to gecko is:
 *
 * - system id (16 byte uuid)
 * - pssh box size (32-bit native endian)
 * - pssh box content (including header)
 */
Mp4parseStatus mp4parse_get_pssh_info(Mp4parseParser *parser, Mp4parsePsshInfo *info);

/*
 * Fill the supplied `Mp4parseTrackAudioInfo` with metadata for `track`.
 */
Mp4parseStatus mp4parse_get_track_audio_info(Mp4parseParser *parser,
                                             uint32_t track_index,
                                             Mp4parseTrackAudioInfo *info);

/*
 * Return the number of tracks parsed by previous `mp4parse_read()` call.
 */
Mp4parseStatus mp4parse_get_track_count(const Mp4parseParser *parser, uint32_t *count);

/*
 * Fill the supplied `Mp4parseTrackInfo` with metadata for `track`.
 */
Mp4parseStatus mp4parse_get_track_info(Mp4parseParser *parser,
                                       uint32_t track_index,
                                       Mp4parseTrackInfo *info);

/*
 * Fill the supplied `Mp4parseTrackVideoInfo` with metadata for `track`.
 */
Mp4parseStatus mp4parse_get_track_video_info(Mp4parseParser *parser,
                                             uint32_t track_index,
                                             Mp4parseTrackVideoInfo *info);

/*
 * A fragmented file needs mvex table and contains no data in stts, stsc, and stco boxes.
 */
Mp4parseStatus mp4parse_is_fragmented(Mp4parseParser *parser,
                                      uint32_t track_id,
                                      uint8_t *fragmented);

/*
 * Allocate an `Mp4parseParser*` to read from the supplied `Mp4parseIo`.
 */
Mp4parseParser *mp4parse_new(const Mp4parseIo *io);

/*
 * Run the `Mp4parseParser*` allocated by `mp4parse_new()` until EOF or error.
 */
Mp4parseStatus mp4parse_read(Mp4parseParser *parser);

// THIS FILE IS AUTOGENERATED BY mp4parse_capi/build.rs - DO NOT EDIT

#endif /* MP4PARSE_CAPI_H */

#ifdef __cplusplus
} /* extern "C" */
#endif