libnestegg  0.1git
nestegg.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2010 Mozilla Foundation
3  *
4  * This program is made available under an ISC-style license. See the
5  * accompanying file LICENSE for details.
6  */
7 #if !defined(NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79)
8 #define NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79
9 
10 #include <limits.h>
11 #include <stdint.h>
12 
13 #if defined(__cplusplus)
14 extern "C" {
15 #endif
16 
66 #define NESTEGG_TRACK_VIDEO 0
67 #define NESTEGG_TRACK_AUDIO 1
68 #define NESTEGG_TRACK_UNKNOWN INT_MAX
70 #define NESTEGG_CODEC_VP8 0
71 #define NESTEGG_CODEC_VORBIS 1
72 #define NESTEGG_CODEC_VP9 2
73 #define NESTEGG_CODEC_OPUS 3
74 #define NESTEGG_CODEC_AV1 4
75 #define NESTEGG_CODEC_UNKNOWN INT_MAX
77 #define NESTEGG_VIDEO_MONO 0
78 #define NESTEGG_VIDEO_STEREO_LEFT_RIGHT 1
79 #define NESTEGG_VIDEO_STEREO_BOTTOM_TOP 2
80 #define NESTEGG_VIDEO_STEREO_TOP_BOTTOM 3
81 #define NESTEGG_VIDEO_STEREO_RIGHT_LEFT 11
83 #define NESTEGG_SEEK_SET 0
84 #define NESTEGG_SEEK_CUR 1
85 #define NESTEGG_SEEK_END 2
87 #define NESTEGG_LOG_DEBUG 1
88 #define NESTEGG_LOG_INFO 10
89 #define NESTEGG_LOG_WARNING 100
90 #define NESTEGG_LOG_ERROR 1000
91 #define NESTEGG_LOG_CRITICAL 10000
93 #define NESTEGG_ENCODING_COMPRESSION 0
94 #define NESTEGG_ENCODING_ENCRYPTION 1
96 #define NESTEGG_PACKET_HAS_SIGNAL_BYTE_FALSE 0
97 #define NESTEGG_PACKET_HAS_SIGNAL_BYTE_UNENCRYPTED 1
98 #define NESTEGG_PACKET_HAS_SIGNAL_BYTE_ENCRYPTED 2
99 #define NESTEGG_PACKET_HAS_SIGNAL_BYTE_PARTITIONED 4
101 #define NESTEGG_PACKET_HAS_KEYFRAME_FALSE 0
102 #define NESTEGG_PACKET_HAS_KEYFRAME_TRUE 1
103 #define NESTEGG_PACKET_HAS_KEYFRAME_UNKNOWN 2
105 typedef struct nestegg nestegg;
106 typedef struct nestegg_packet nestegg_packet;
109 typedef struct {
110 
117  int (* read)(void * buffer, size_t length, void * userdata);
118 
126  int (* seek)(int64_t offset, int whence, void * userdata);
127 
132  int64_t (* tell)(void * userdata);
133 
135  void * userdata;
136 } nestegg_io;
137 
139 typedef struct {
140  unsigned int stereo_mode;
144  unsigned int width;
145  unsigned int height;
146  unsigned int display_width;
147  unsigned int display_height;
148  unsigned int crop_bottom;
149  unsigned int crop_top;
150  unsigned int crop_left;
151  unsigned int crop_right;
152  unsigned int alpha_mode;
154 
156 typedef struct {
157  double rate;
158  unsigned int channels;
159  unsigned int depth;
160  uint64_t codec_delay;
161  uint64_t seek_preroll;
163 
165 typedef void (* nestegg_log)(nestegg * context, unsigned int severity, char const * format, ...);
166 
176 int nestegg_init(nestegg ** context, nestegg_io io, nestegg_log callback, int64_t max_offset);
177 
180 void nestegg_destroy(nestegg * context);
181 
187 int nestegg_duration(nestegg * context, uint64_t * duration);
188 
196 int nestegg_tstamp_scale(nestegg * context, uint64_t * scale);
197 
203 int nestegg_track_count(nestegg * context, unsigned int * tracks);
204 
215 int nestegg_get_cue_point(nestegg * context, unsigned int cluster_num,
216  int64_t max_offset, int64_t * start_pos,
217  int64_t * end_pos, uint64_t * tstamp);
218 
226 int nestegg_offset_seek(nestegg * context, uint64_t offset);
227 
236 int nestegg_track_seek(nestegg * context, unsigned int track, uint64_t tstamp);
237 
245 int nestegg_track_type(nestegg * context, unsigned int track);
246 
257 int nestegg_track_codec_id(nestegg * context, unsigned int track);
258 
267 int nestegg_track_codec_data_count(nestegg * context, unsigned int track,
268  unsigned int * count);
269 
280 int nestegg_track_codec_data(nestegg * context, unsigned int track, unsigned int item,
281  unsigned char ** data, size_t * length);
282 
289 int nestegg_track_video_params(nestegg * context, unsigned int track,
290  nestegg_video_params * params);
291 
298 int nestegg_track_audio_params(nestegg * context, unsigned int track,
299  nestegg_audio_params * params);
300 
308 int nestegg_track_encoding(nestegg * context, unsigned int track);
309 
319 int nestegg_track_content_enc_key_id(nestegg * context, unsigned int track,
320  unsigned char const ** content_enc_key_id,
321  size_t * content_enc_key_id_length);
322 
330 int nestegg_track_default_duration(nestegg * context, unsigned int track,
331  uint64_t * duration);
332 
337 int nestegg_read_reset(nestegg * context);
338 
348 int nestegg_read_packet(nestegg * context, nestegg_packet ** packet);
349 
352 void nestegg_free_packet(nestegg_packet * packet);
353 
361 
367 int nestegg_packet_track(nestegg_packet * packet, unsigned int * track);
368 
374 int nestegg_packet_tstamp(nestegg_packet * packet, uint64_t * tstamp);
375 
381 int nestegg_packet_duration(nestegg_packet * packet, uint64_t * duration);
382 
388 int nestegg_packet_count(nestegg_packet * packet, unsigned int * count);
389 
398 int nestegg_packet_data(nestegg_packet * packet, unsigned int item,
399  unsigned char ** data, size_t * length);
400 
411 int nestegg_packet_additional_data(nestegg_packet * packet, unsigned int id,
412  unsigned char ** data, size_t * length);
413 
420  int64_t * discard_padding);
421 
434 
444 int nestegg_packet_iv(nestegg_packet * packet, unsigned char const ** iv,
445  size_t * length);
446 
456  uint32_t const ** partition_offsets,
457  uint8_t * num_offsets);
458 
465  int64_t * reference_block);
466 
471 int nestegg_has_cues(nestegg * context);
472 
478 int nestegg_sniff(unsigned char const * buffer, size_t length);
479 
480 #if defined(__cplusplus)
481 }
482 #endif
483 
484 #endif /* NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 */
nestegg_video_params
Parameters specific to a video track.
Definition: nestegg.h:139
nestegg_track_codec_id
int nestegg_track_codec_id(nestegg *context, unsigned int track)
Query the codec ID specified by track.
nestegg_video_params::height
unsigned int height
Height of the video frame in pixels.
Definition: nestegg.h:145
nestegg_audio_params::depth
unsigned int depth
Bits per sample.
Definition: nestegg.h:159
nestegg_read_reset
int nestegg_read_reset(nestegg *context)
Reset parser state to the last valid state before nestegg_read_packet failed.
nestegg_track_video_params
int nestegg_track_video_params(nestegg *context, unsigned int track, nestegg_video_params *params)
Query the video parameters specified by track.
nestegg_packet_data
int nestegg_packet_data(nestegg_packet *packet, unsigned int item, unsigned char **data, size_t *length)
Get a pointer to chunk number item of packet data.
nestegg
struct nestegg nestegg
Opaque handle referencing the stream state.
Definition: nestegg.h:105
nestegg_packet
struct nestegg_packet nestegg_packet
Opaque handle referencing a packet of data.
Definition: nestegg.h:106
nestegg_track_count
int nestegg_track_count(nestegg *context, unsigned int *tracks)
Query the number of tracks in the media stream.
nestegg_track_codec_data_count
int nestegg_track_codec_data_count(nestegg *context, unsigned int track, unsigned int *count)
Query the number of codec initialization chunks for track.
nestegg_sniff
int nestegg_sniff(unsigned char const *buffer, size_t length)
Try to determine if the buffer looks like the beginning of a WebM file.
nestegg_video_params::display_width
unsigned int display_width
Display width of the video frame in pixels.
Definition: nestegg.h:146
nestegg_track_content_enc_key_id
int nestegg_track_content_enc_key_id(nestegg *context, unsigned int track, unsigned char const **content_enc_key_id, size_t *content_enc_key_id_length)
Query the ContentEncKeyId for track.
nestegg_video_params::crop_right
unsigned int crop_right
Pixels to crop from the right of the frame.
Definition: nestegg.h:151
nestegg_audio_params::seek_preroll
uint64_t seek_preroll
Nanoseconds that must be discarded after a seek.
Definition: nestegg.h:161
nestegg_track_codec_data
int nestegg_track_codec_data(nestegg *context, unsigned int track, unsigned int item, unsigned char **data, size_t *length)
Get a pointer to chunk number item of codec initialization data for track.
nestegg_packet_tstamp
int nestegg_packet_tstamp(nestegg_packet *packet, uint64_t *tstamp)
Query the timestamp in nanoseconds of packet.
nestegg_get_cue_point
int nestegg_get_cue_point(nestegg *context, unsigned int cluster_num, int64_t max_offset, int64_t *start_pos, int64_t *end_pos, uint64_t *tstamp)
Query the start and end offset for a particular cluster.
nestegg_video_params::stereo_mode
unsigned int stereo_mode
Video mode.
Definition: nestegg.h:140
nestegg_packet_track
int nestegg_packet_track(nestegg_packet *packet, unsigned int *track)
Query the track number of packet.
nestegg_packet_count
int nestegg_packet_count(nestegg_packet *packet, unsigned int *count)
Query the number of data chunks contained in packet.
nestegg_audio_params::codec_delay
uint64_t codec_delay
Nanoseconds that must be discarded from the start.
Definition: nestegg.h:160
nestegg_audio_params::channels
unsigned int channels
Number of audio channels.
Definition: nestegg.h:158
nestegg_track_seek
int nestegg_track_seek(nestegg *context, unsigned int track, uint64_t tstamp)
Seek track to tstamp.
nestegg_io::userdata
void * userdata
User supplied pointer to be passed to the IO callbacks.
Definition: nestegg.h:135
nestegg_packet_encryption
int nestegg_packet_encryption(nestegg_packet *packet)
Query if a packet is encrypted.
nestegg_packet_offsets
int nestegg_packet_offsets(nestegg_packet *packet, uint32_t const **partition_offsets, uint8_t *num_offsets)
Query the packet for offsets.
nestegg_tstamp_scale
int nestegg_tstamp_scale(nestegg *context, uint64_t *scale)
Query the tstamp scale of the media stream in nanoseconds.
nestegg_packet_additional_data
int nestegg_packet_additional_data(nestegg_packet *packet, unsigned int id, unsigned char **data, size_t *length)
Get a pointer to additional data with identifier id of additional packet data.
nestegg_track_type
int nestegg_track_type(nestegg *context, unsigned int track)
Query the type specified by track.
nestegg_destroy
void nestegg_destroy(nestegg *context)
Destroy a nestegg context and free associated memory.
nestegg_log
void(* nestegg_log)(nestegg *context, unsigned int severity, char const *format,...)
Logging callback function pointer.
Definition: nestegg.h:165
nestegg_free_packet
void nestegg_free_packet(nestegg_packet *packet)
Destroy a nestegg_packet and free associated memory.
nestegg_packet_duration
int nestegg_packet_duration(nestegg_packet *packet, uint64_t *duration)
Query the duration in nanoseconds of packet.
nestegg_io
User supplied IO context.
Definition: nestegg.h:109
nestegg_packet_reference_block
int nestegg_packet_reference_block(nestegg_packet *packet, int64_t *reference_block)
Returns reference_block given packet.
nestegg_video_params::display_height
unsigned int display_height
Display height of the video frame in pixels.
Definition: nestegg.h:147
nestegg_offset_seek
int nestegg_offset_seek(nestegg *context, uint64_t offset)
Seek to offset.
nestegg_duration
int nestegg_duration(nestegg *context, uint64_t *duration)
Query the duration of the media stream in nanoseconds.
nestegg_packet_iv
int nestegg_packet_iv(nestegg_packet *packet, unsigned char const **iv, size_t *length)
Query the IV for an encrypted packet.
nestegg_has_cues
int nestegg_has_cues(nestegg *context)
Query the presence of cues.
nestegg_video_params::width
unsigned int width
Width of the video frame in pixels.
Definition: nestegg.h:144
nestegg_track_encoding
int nestegg_track_encoding(nestegg *context, unsigned int track)
Query the encoding status for track.
nestegg_init
int nestegg_init(nestegg **context, nestegg_io io, nestegg_log callback, int64_t max_offset)
Initialize a nestegg context.
nestegg_video_params::crop_top
unsigned int crop_top
Pixels to crop from the top of the frame.
Definition: nestegg.h:149
nestegg_video_params::crop_bottom
unsigned int crop_bottom
Pixels to crop from the bottom of the frame.
Definition: nestegg.h:148
nestegg_track_audio_params
int nestegg_track_audio_params(nestegg *context, unsigned int track, nestegg_audio_params *params)
Query the audio parameters specified by track.
nestegg_read_packet
int nestegg_read_packet(nestegg *context, nestegg_packet **packet)
Read a packet of media data.
nestegg_track_default_duration
int nestegg_track_default_duration(nestegg *context, unsigned int track, uint64_t *duration)
Query the default frame duration for track.
nestegg_video_params::crop_left
unsigned int crop_left
Pixels to crop from the left of the frame.
Definition: nestegg.h:150
nestegg_video_params::alpha_mode
unsigned int alpha_mode
1 if an additional opacity stream is available, otherwise 0.
Definition: nestegg.h:152
nestegg_audio_params::rate
double rate
Sampling rate in Hz.
Definition: nestegg.h:157
nestegg_packet_has_keyframe
int nestegg_packet_has_keyframe(nestegg_packet *packet)
Query the keyframe status for a given packet.
nestegg_packet_discard_padding
int nestegg_packet_discard_padding(nestegg_packet *packet, int64_t *discard_padding)
Returns discard_padding for given packet.
nestegg_audio_params
Parameters specific to an audio track.
Definition: nestegg.h:156