1538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* 2538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * Copyright © 2010 Mozilla Foundation 3538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * 4538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * This program is made available under an ISC-style license. See the 5538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * accompanying file LICENSE for details. 6538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber */ 7538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifndef NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 8538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 9538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 10538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include "vpx/vpx_integer.h" 11538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 12538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef __cplusplus 13538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberextern "C" { 14538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 15538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 16538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** @mainpage 17538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 18538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @section intro Introduction 19538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 20538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber This is the documentation fot the <tt>libnestegg</tt> C API. 21538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber <tt>libnestegg</tt> is a demultiplexing library for <a 22538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber href="http://www.matroska.org/">Matroska</a> and <a 23538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber href="http://www.webmproject.org/">WebMedia</a> media files. 24538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 25538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @section example Example code 26538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 27538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @code 28538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg * demux_ctx; 29538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_init(&demux_ctx, io, NULL); 30538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet * pkt; 32538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber while ((r = nestegg_read_packet(demux_ctx, &pkt)) > 0) { 33538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int track; 34538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 35538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_track(pkt, &track); 36538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 37538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber // This example decodes the first track only. 38538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (track == 0) { 39538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int chunk, chunks; 40538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 41538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_count(pkt, &chunks); 42538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 43538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber // Decode each chunk of data. 44538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber for (chunk = 0; chunk < chunks; ++chunk) { 45538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char * data; 46538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber size_t data_size; 47538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 48538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_data(pkt, chunk, &data, &data_size); 49538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 50538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber example_codec_decode(codec_ctx, data, data_size); 51538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 52538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 53538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 54538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_free_packet(pkt); 55538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 56538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 57538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_destroy(demux_ctx); 58538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @endcode 59538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber*/ 60538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 61538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 62538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** @file 63538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber The <tt>libnestegg</tt> C API. */ 64538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 65538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_TRACK_VIDEO 0 /**< Track is of type video. */ 66538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_TRACK_AUDIO 1 /**< Track is of type audio. */ 67538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 68538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_CODEC_VP8 0 /**< Track uses Google On2 VP8 codec. */ 69538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_CODEC_VORBIS 1 /**< Track uses Xiph Vorbis codec. */ 70538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 71538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_SET 0 /**< Seek offset relative to beginning of stream. */ 72538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_CUR 1 /**< Seek offset relative to current position in stream. */ 73538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_END 2 /**< Seek offset relative to end of stream. */ 74538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 75538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_DEBUG 1 /**< Debug level log message. */ 76538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_INFO 10 /**< Informational level log message. */ 77538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_WARNING 100 /**< Warning level log message. */ 78538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_ERROR 1000 /**< Error level log message. */ 79538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_CRITICAL 10000 /**< Critical level log message. */ 80538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 81538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct nestegg nestegg; /**< Opaque handle referencing the stream state. */ 82538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct nestegg_packet nestegg_packet; /**< Opaque handle referencing a packet of data. */ 83538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 84538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** User supplied IO context. */ 85538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 86538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied read callback. 87538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param buffer Buffer to read data into. 88538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Length of supplied buffer in bytes. 89538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 90538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 1 Read succeeded. 91538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 End of stream. 92538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 93538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int (* read)(void * buffer, size_t length, void * userdata); 94538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 95538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied seek callback. 96538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param offset Offset within the stream to seek to. 97538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param whence Seek direction. One of #NESTEGG_SEEK_SET, 98538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber #NESTEGG_SEEK_CUR, or #NESTEGG_SEEK_END. 99538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 100538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Seek succeeded. 101538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 102538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int (* seek)(int64_t offset, int whence, void * userdata); 103538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 104538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied tell callback. 105538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 106538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @returns Current position within the stream. 107538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 108538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int64_t (* tell)(void * userdata); 109538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 110538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied pointer to be passed to the IO callbacks. */ 111538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber void * userdata; 112538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_io; 113538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 114538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Parameters specific to a video track. */ 115538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 116538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int width; /**< Width of the video frame in pixels. */ 117538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int height; /**< Height of the video frame in pixels. */ 118538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int display_width; /**< Display width of the video frame in pixels. */ 119538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int display_height; /**< Display height of the video frame in pixels. */ 120538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_bottom; /**< Pixels to crop from the bottom of the frame. */ 121538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_top; /**< Pixels to crop from the top of the frame. */ 122538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_left; /**< Pixels to crop from the left of the frame. */ 123538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_right; /**< Pixels to crop from the right of the frame. */ 124538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_video_params; 125538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 126538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Parameters specific to an audio track. */ 127538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 128538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber double rate; /**< Sampling rate in Hz. */ 129538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int channels; /**< Number of audio channels. */ 130538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int depth; /**< Bits per sample. */ 131538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_audio_params; 132538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 133538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Logging callback function pointer. */ 134538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef void (* nestegg_log)(nestegg * context, unsigned int severity, char const * format, ...); 135538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 136538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Initialize a nestegg context. During initialization the parser will 137538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber read forward in the stream processing all elements until the first 138538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber block of media is reached. All track metadata has been processed at this point. 139538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Storage for the new nestegg context. @see nestegg_destroy 140538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param io User supplied IO context. 141538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param callback Optional logging callback function pointer. May be NULL. 142538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 143538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 144538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_init(nestegg ** context, nestegg_io io, nestegg_log callback); 145538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 146538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Destroy a nestegg context and free associated memory. 147538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context #nestegg context to be freed. @see nestegg_init */ 148538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervoid nestegg_destroy(nestegg * context); 149538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 150538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the duration of the media stream in nanoseconds. 151538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 152538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param duration Storage for the queried duration. 153538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 154538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 155538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_duration(nestegg * context, uint64_t * duration); 156538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 157538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the tstamp scale of the media stream in nanoseconds. 158538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber Timecodes presented by nestegg have been scaled by this value 159538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber before presentation to the caller. 160538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 161538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param scale Storage for the queried scale factor. 162538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 163538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 164538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_tstamp_scale(nestegg * context, uint64_t * scale); 165538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 166538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of tracks in the media stream. 167538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 168538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tracks Storage for the queried track count. 169538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 170538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 171538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_count(nestegg * context, unsigned int * tracks); 172538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 173538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Seek @a track to @a tstamp. Stream seek will terminate at the earliest 174538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber key point in the stream at or before @a tstamp. Other tracks in the 175538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber stream will output packets with unspecified but nearby timestamps. 176538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 177538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 178538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tstamp Absolute timestamp in nanoseconds. 179538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 180538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 181538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_seek(nestegg * context, unsigned int track, uint64_t tstamp); 182538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 183538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the type specified by @a track. 184538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 185538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 186538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_TRACK_VIDEO Track type is video. 187538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_TRACK_AUDIO Track type is audio. 188538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 189538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_type(nestegg * context, unsigned int track); 190538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 191538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the codec ID specified by @a track. 192538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 193538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 194538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_CODEC_VP8 Track codec is VP8. 195538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_CODEC_VORBIS Track codec is Vorbis. 196538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 197538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_id(nestegg * context, unsigned int track); 198538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 199538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of codec initialization chunks for @a track. Each 200538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber chunk of data should be passed to the codec initialization functions in 201538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber the order returned. 202538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 203538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 204538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param count Storage for the queried chunk count. 205538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 206538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 207538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_data_count(nestegg * context, unsigned int track, 208538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int * count); 209538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 210538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Get a pointer to chunk number @a item of codec initialization data for 211538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @a track. 212538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 213538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 214538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param item Zero based chunk item number. 215538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param data Storage for the queried data pointer. 216538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber The data is owned by the #nestegg context. 217538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Storage for the queried data size. 218538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 219538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 220538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_data(nestegg * context, unsigned int track, unsigned int item, 221538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char ** data, size_t * length); 222538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 223538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the video parameters specified by @a track. 224538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 225538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 226538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param params Storage for the queried video parameters. 227538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 228538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 229538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_video_params(nestegg * context, unsigned int track, 230538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_video_params * params); 231538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 232538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the audio parameters specified by @a track. 233538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 234538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 235538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param params Storage for the queried audio parameters. 236538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 237538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 238538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_audio_params(nestegg * context, unsigned int track, 239538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_audio_params * params); 240538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 241538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Read a packet of media data. A packet consists of one or more chunks of 242538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber data associated with a single track. nestegg_read_packet should be 243538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber called in a loop while the return value is 1 to drive the stream parser 244538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber forward. @see nestegg_free_packet 245538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Context returned by #nestegg_init. 246538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Storage for the returned nestegg_packet. 247538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 1 Additional packets may be read in subsequent calls. 248538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 End of stream. 249538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 250538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_read_packet(nestegg * context, nestegg_packet ** packet); 251538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 252538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Destroy a nestegg_packet and free associated memory. 253538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet #nestegg_packet to be freed. @see nestegg_read_packet */ 254538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervoid nestegg_free_packet(nestegg_packet * packet); 255538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 256538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the track number of @a packet. 257538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 258538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Storage for the queried zero based track index. 259538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 260538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 261538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_track(nestegg_packet * packet, unsigned int * track); 262538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 263538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the time stamp in nanoseconds of @a packet. 264538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 265538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tstamp Storage for the queried timestamp in nanoseconds. 266538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 267538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 268538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_tstamp(nestegg_packet * packet, uint64_t * tstamp); 269538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 270538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of data chunks contained in @a packet. 271538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 272538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param count Storage for the queried timestamp in nanoseconds. 273538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 274538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 275538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_count(nestegg_packet * packet, unsigned int * count); 276538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 277538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Get a pointer to chunk number @a item of packet data. 278538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 279538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param item Zero based chunk item number. 280538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param data Storage for the queried data pointer. 281538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber The data is owned by the #nestegg_packet packet. 282538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Storage for the queried data size. 283538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 284538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 285538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_data(nestegg_packet * packet, unsigned int item, 286538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char ** data, size_t * length); 287538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 288538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef __cplusplus 289538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 290538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 291538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 292538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif /* NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 */ 293