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. */ 70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define NESTEGG_CODEC_VP9 2 /**< Track uses Google On2 VP9 codec. */ 71538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 72538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_SET 0 /**< Seek offset relative to beginning of stream. */ 73538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_CUR 1 /**< Seek offset relative to current position in stream. */ 74538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_SEEK_END 2 /**< Seek offset relative to end of stream. */ 75538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 76538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_DEBUG 1 /**< Debug level log message. */ 77538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_INFO 10 /**< Informational level log message. */ 78538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_WARNING 100 /**< Warning level log message. */ 79538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_ERROR 1000 /**< Error level log message. */ 80538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define NESTEGG_LOG_CRITICAL 10000 /**< Critical level log message. */ 81538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 82538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct nestegg nestegg; /**< Opaque handle referencing the stream state. */ 83538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct nestegg_packet nestegg_packet; /**< Opaque handle referencing a packet of data. */ 84538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 85538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** User supplied IO context. */ 86538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 87538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied read callback. 88538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param buffer Buffer to read data into. 89538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Length of supplied buffer in bytes. 90538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 91538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 1 Read succeeded. 92538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 End of stream. 93538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 94538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int (* read)(void * buffer, size_t length, void * userdata); 95538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 96538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied seek callback. 97538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param offset Offset within the stream to seek to. 98538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param whence Seek direction. One of #NESTEGG_SEEK_SET, 99538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber #NESTEGG_SEEK_CUR, or #NESTEGG_SEEK_END. 100538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 101538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Seek succeeded. 102538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 103538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int (* seek)(int64_t offset, int whence, void * userdata); 104538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 105538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied tell callback. 106538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param userdata The #userdata supplied by the user. 107538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @returns Current position within the stream. 108538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 109538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int64_t (* tell)(void * userdata); 110538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 111538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /** User supplied pointer to be passed to the IO callbacks. */ 112538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber void * userdata; 113538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_io; 114538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 115538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Parameters specific to a video track. */ 116538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 117538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int width; /**< Width of the video frame in pixels. */ 118538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int height; /**< Height of the video frame in pixels. */ 119538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int display_width; /**< Display width of the video frame in pixels. */ 120538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int display_height; /**< Display height of the video frame in pixels. */ 121538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_bottom; /**< Pixels to crop from the bottom of the frame. */ 122538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_top; /**< Pixels to crop from the top of the frame. */ 123538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_left; /**< Pixels to crop from the left of the frame. */ 124538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int crop_right; /**< Pixels to crop from the right of the frame. */ 125538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_video_params; 126538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 127538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Parameters specific to an audio track. */ 128538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef struct { 129538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber double rate; /**< Sampling rate in Hz. */ 130538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int channels; /**< Number of audio channels. */ 131538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int depth; /**< Bits per sample. */ 132538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} nestegg_audio_params; 133538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 134538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Logging callback function pointer. */ 135538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubertypedef void (* nestegg_log)(nestegg * context, unsigned int severity, char const * format, ...); 136538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 137538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Initialize a nestegg context. During initialization the parser will 138538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber read forward in the stream processing all elements until the first 139538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber block of media is reached. All track metadata has been processed at this point. 140538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Storage for the new nestegg context. @see nestegg_destroy 141538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param io User supplied IO context. 142538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param callback Optional logging callback function pointer. May be NULL. 143538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 144538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 145538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_init(nestegg ** context, nestegg_io io, nestegg_log callback); 146538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 147538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Destroy a nestegg context and free associated memory. 148538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context #nestegg context to be freed. @see nestegg_init */ 149538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervoid nestegg_destroy(nestegg * context); 150538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 151538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the duration of the media stream in nanoseconds. 152538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 153538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param duration Storage for the queried duration. 154538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 155538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 156538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_duration(nestegg * context, uint64_t * duration); 157538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 158538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the tstamp scale of the media stream in nanoseconds. 159538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber Timecodes presented by nestegg have been scaled by this value 160538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber before presentation to the caller. 161538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 162538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param scale Storage for the queried scale factor. 163538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 164538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 165538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_tstamp_scale(nestegg * context, uint64_t * scale); 166538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 167538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of tracks in the media stream. 168538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 169538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tracks Storage for the queried track count. 170538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 171538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 172538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_count(nestegg * context, unsigned int * tracks); 173538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 174538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Seek @a track to @a tstamp. Stream seek will terminate at the earliest 175538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber key point in the stream at or before @a tstamp. Other tracks in the 176538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber stream will output packets with unspecified but nearby timestamps. 177538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 178538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 179538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tstamp Absolute timestamp in nanoseconds. 180538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 181538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 182538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_seek(nestegg * context, unsigned int track, uint64_t tstamp); 183538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 184538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the type specified by @a track. 185538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 186538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 187538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_TRACK_VIDEO Track type is video. 188538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_TRACK_AUDIO Track type is audio. 189538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 190538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_type(nestegg * context, unsigned int track); 191538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 192538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the codec ID specified by @a track. 193538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 194538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 195538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_CODEC_VP8 Track codec is VP8. 196538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval #NESTEGG_CODEC_VORBIS Track codec is Vorbis. 197538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 198538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_id(nestegg * context, unsigned int track); 199538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 200538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of codec initialization chunks for @a track. Each 201538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber chunk of data should be passed to the codec initialization functions in 202538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber the order returned. 203538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 204538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 205538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param count Storage for the queried chunk count. 206538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 207538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 208538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_data_count(nestegg * context, unsigned int track, 209538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int * count); 210538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 211538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Get a pointer to chunk number @a item of codec initialization data for 212538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @a track. 213538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 214538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 215538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param item Zero based chunk item number. 216538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param data Storage for the queried data pointer. 217538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber The data is owned by the #nestegg context. 218538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Storage for the queried data size. 219538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 220538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 221538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_codec_data(nestegg * context, unsigned int track, unsigned int item, 222538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char ** data, size_t * length); 223538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 224538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the video parameters specified by @a track. 225538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 226538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 227538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param params Storage for the queried video parameters. 228538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 229538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 230538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_video_params(nestegg * context, unsigned int track, 231538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_video_params * params); 232538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 233538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the audio parameters specified by @a track. 234538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Stream context initialized by #nestegg_init. 235538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Zero based track number. 236538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param params Storage for the queried audio parameters. 237538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 238538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 239538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_track_audio_params(nestegg * context, unsigned int track, 240538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_audio_params * params); 241538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 242538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Read a packet of media data. A packet consists of one or more chunks of 243538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber data associated with a single track. nestegg_read_packet should be 244538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber called in a loop while the return value is 1 to drive the stream parser 245538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber forward. @see nestegg_free_packet 246538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param context Context returned by #nestegg_init. 247538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Storage for the returned nestegg_packet. 248538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 1 Additional packets may be read in subsequent calls. 249538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 End of stream. 250538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 251538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_read_packet(nestegg * context, nestegg_packet ** packet); 252538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 253538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Destroy a nestegg_packet and free associated memory. 254538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet #nestegg_packet to be freed. @see nestegg_read_packet */ 255538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervoid nestegg_free_packet(nestegg_packet * packet); 256538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 257538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the track number of @a packet. 258538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 259538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param track Storage for the queried zero based track index. 260538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 261538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 262538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_track(nestegg_packet * packet, unsigned int * track); 263538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 264538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the time stamp in nanoseconds of @a packet. 265538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 266538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param tstamp Storage for the queried timestamp in nanoseconds. 267538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 268538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 269538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_tstamp(nestegg_packet * packet, uint64_t * tstamp); 270538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 271538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Query the number of data chunks contained in @a packet. 272538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 273538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param count Storage for the queried timestamp in nanoseconds. 274538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 275538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 276538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_count(nestegg_packet * packet, unsigned int * count); 277538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 278538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/** Get a pointer to chunk number @a item of packet data. 279538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param packet Packet initialized by #nestegg_read_packet. 280538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param item Zero based chunk item number. 281538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param data Storage for the queried data pointer. 282538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber The data is owned by the #nestegg_packet packet. 283538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @param length Storage for the queried data size. 284538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval 0 Success. 285538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber @retval -1 Error. */ 286538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint nestegg_packet_data(nestegg_packet * packet, unsigned int item, 287538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char ** data, size_t * length); 288538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 289538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef __cplusplus 290538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 291538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 292538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 293538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif /* NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 */ 294