36 #define NUT_MAX_STREAMS 256     
   39                                   int64_t *pos_arg, int64_t pos_limit);
 
   47     while (len > maxlen) {
 
   55         string[
FFMIN(len, maxlen - 1)] = 0;
 
   90                             int calculate_checksum, uint64_t startcode)
 
  118         state = (state << 8) | 
avio_r8(bc);
 
  119         if ((state >> 56) != 
'N')
 
  144         if (startcode == code)
 
  146         else if (startcode == 0)
 
  156     for (i = 0; i < p->
buf_size-8; i++) {
 
  165 #define GET_V(dst, check)                                                     \ 
  167         tmp = ffio_read_varlen(bc);                                           \ 
  169             av_log(s, AV_LOG_ERROR, "Error " #dst " is (%"PRId64")\n", tmp);  \ 
  170             ret = AVERROR_INVALIDDATA;                                        \ 
  197     unsigned int stream_count;
 
  198     int i, j, 
count, ret;
 
  199     int tmp_stream, tmp_mul, tmp_pts, tmp_size, tmp_res, tmp_head_idx;
 
  242     for (i = 0; i < 256;) {
 
  263             count = tmp_mul - tmp_size;
 
  269         while (tmp_fields-- > 8) {
 
  283         if (tmp_stream >= stream_count) {
 
  285                    tmp_stream, stream_count);
 
  290         for (j = 0; j < 
count; j++, i++) {
 
  314             if (rem < nut->header_len[i]) {
 
  316                        "invalid elision header %d : %d > %d\n",
 
  349     for (i = 0; i < stream_count; i++)
 
  367     int class, stream_id, ret;
 
  375     stc = &nut->
stream[stream_id];
 
  380     class                = ffio_read_varlen(bc);
 
  418                "Unknown codec tag '0x%04x' for stream number %d\n",
 
  419                (
unsigned int) tmp, stream_id);
 
  453                "stream header %d checksum mismatch\n", stream_id);
 
  480         if (stream_id == i || stream_id == -1)
 
  488     uint64_t 
tmp, chapter_start, chapter_len;
 
  489     unsigned int stream_id_plus1, 
count;
 
  490     int chapter_id, i, ret = 0;
 
  492     char name[256], str_value[1024], type_str[256];
 
  494     int *event_flags        = 
NULL;
 
  498     int metadata_flag       = 0;
 
  504     chapter_id    = 
get_s(bc);
 
  509     if (chapter_id && !stream_id_plus1) {
 
  514                                      start, start + chapter_len, 
NULL);
 
  520     } 
else if (stream_id_plus1) {
 
  521         st       = s->
streams[stream_id_plus1 - 1];
 
  531     for (i = 0; i < 
count; i++) {
 
  532         ret = 
get_str(bc, name, 
sizeof(name));
 
  542             ret = 
get_str(bc, str_value, 
sizeof(str_value));
 
  543         } 
else if (value == -2) {
 
  544             ret = 
get_str(bc, type_str, 
sizeof(type_str));
 
  550             ret = 
get_str(bc, str_value, 
sizeof(str_value));
 
  551         } 
else if (value == -3) {
 
  554         } 
else if (value == -4) {
 
  557         } 
else if (value < -4) {
 
  571                    "invalid stream id %d for info packet\n",
 
  576         if (!strcmp(type, 
"UTF-8")) {
 
  577             if (chapter_id == 0 && !strcmp(name, 
"Disposition")) {
 
  582             if (stream_id_plus1 && !strcmp(name, 
"r_frame_rate")) {
 
  593                     *event_flags |= metadata_flag;
 
  604     return FFMIN(ret, 0);
 
  668     int i, j, syncpoint_count;
 
  670     int64_t *syncpoints = 
NULL;
 
  672     int8_t *has_keyframe = 
NULL;
 
  697     GET_V(syncpoint_count, tmp < INT_MAX / 8 && tmp > 0);
 
  700     if (!syncpoints || !has_keyframe) {
 
  704     for (i = 0; i < syncpoint_count; i++) {
 
  706         if (syncpoints[i] <= 0)
 
  709             syncpoints[i] += syncpoints[i - 1];
 
  714         for (j = 0; j < syncpoint_count;) {
 
  722                 if (n + x >= syncpoint_count + 1) {
 
  723                     av_log(s, 
AV_LOG_ERROR, 
"index overflow A %d + %"PRIu64
" >= %d\n", n, x, syncpoint_count + 1);
 
  727                     has_keyframe[n++] = 
flag;
 
  728                 has_keyframe[n++] = !
flag;
 
  735                     if (n >= syncpoint_count + 1) {
 
  739                     has_keyframe[n++] = x & 1;
 
  743             if (has_keyframe[0]) {
 
  748             for (; j < n && j < syncpoint_count; j++) {
 
  749                 if (has_keyframe[j]) {
 
  796     int initialized_stream_count;
 
  812     for (initialized_stream_count = 0; initialized_stream_count < s->
nb_streams;) {
 
  819             initialized_stream_count++;
 
  828         if (startcode == 0) {
 
  866     int64_t channel_layout = 0;
 
  872     for (i=0; i<
count; i++) {
 
  877         ret = 
get_str(bc, name, 
sizeof(name));
 
  885             ret = 
get_str(bc, str_value, 
sizeof(str_value));
 
  891         } 
else if (value == -2) {
 
  893             int64_t v64, value_len;
 
  895             ret = 
get_str(bc, type_str, 
sizeof(type_str));
 
  901             if (value_len < 0 || value_len >= maxpos - 
avio_tell(bc))
 
  903             if (!strcmp(name, 
"Palette")) {
 
  905             } 
else if (!strcmp(name, 
"Extradata")) {
 
  907             } 
else if (sscanf(name, 
"CodecSpecificSide%"SCNd64
"", &v64) == 1) {
 
  913             } 
else if (!strcmp(name, 
"ChannelLayout") && value_len == 8) {
 
  924         } 
else if (value == -3) {
 
  926         } 
else if (value == -4) {
 
  928         } 
else if (value < -4) {
 
  931             if (!strcmp(name, 
"SkipStart")) {
 
  933             } 
else if (!strcmp(name, 
"SkipEnd")) {
 
  935             } 
else if (!strcmp(name, 
"Channels")) {
 
  937             } 
else if (!strcmp(name, 
"SampleRate")) {
 
  939             } 
else if (!strcmp(name, 
"Width")) {
 
  941             } 
else if (!strcmp(name, 
"Height")) {
 
  949     if (channels || channel_layout || sample_rate || width || height) {
 
  953         bytestream_put_le32(&dst,
 
  960             bytestream_put_le32(&dst, channels);
 
  962             bytestream_put_le64(&dst, channel_layout);
 
  964             bytestream_put_le32(&dst, sample_rate);
 
  965         if (width || height){
 
  966             bytestream_put_le32(&dst, width);
 
  967             bytestream_put_le32(&dst, height);
 
  971     if (skip_start || skip_end) {
 
  986                                uint8_t *header_idx, 
int frame_code)
 
  991     int size, 
flags, size_mul, pts_delta, i, reserved_count, ret;
 
  997                "Last frame must have been damaged %"PRId64
" > %"PRId64
" + %d\n",
 
 1017     stc = &nut->
stream[*stream_id];
 
 1035     for (i = 0; i < reserved_count; i++) {
 
 1072     int size, stream_id, discard, ret;
 
 1073     int64_t 
pts, last_IP_pts;
 
 1081     stc = &nut->
stream[stream_id];
 
 1090          last_IP_pts > pts) ||
 
 1100     if (nut->
header[header_idx])
 
 1115         pkt->
size -= sm_size;
 
 1140     int i, frame_code = 0, ret, skip;
 
 1141     int64_t ts, back_ptr;
 
 1154             if (frame_code == 
'N') {
 
 1156                 for (i = 1; i < 8; i++)
 
 1157                     tmp = (tmp << 8) + 
avio_r8(bc);
 
 1195                                   int64_t *pos_arg, int64_t pos_limit)
 
 1199     int64_t pos, 
pts, back_ptr;
 
 1201            stream_index, *pos_arg, pos_limit);
 
 1215     if (stream_index == -2)
 
 1228     Syncpoint *
sp, *next_node[2] = { &nopts_sp, &nopts_sp };
 
 1229     int64_t pos, pos2, ts;
 
 1247                      (
void **) next_node);
 
 1249                next_node[0]->pos, next_node[1]->pos, next_node[0]->ts,
 
 1252                             next_node[1]->
pos, next_node[1]->
pos,
 
 1253                             next_node[0]->
ts, next_node[1]->
ts,
 
 1259             dummy.
pos    = pos + 16;
 
 1260             next_node[1] = &nopts_sp;
 
 1262                          (
void **) next_node);
 
 1264                                  next_node[1]->
pos, next_node[1]->
pos,
 
 1283     if (pos2 > pos || pos2 + 15 < pos)
 
 1303     .extensions     = 
"nut",
 
uint64_t ffio_read_varlen(AVIOContext *bc)
discard all frames except keyframes 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
int64_t avio_size(AVIOContext *s)
Get the filesize. 
int64_t last_syncpoint_pos
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list. 
enum AVDurationEstimationMethod duration_estimation_method
The duration field can be estimated through various ways, and this field can be used to know how the ...
#define AV_LOG_WARNING
Something somehow does not look correct. 
int64_t pos
byte position in stream, -1 if unknown 
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding. 
const AVCodecTag ff_nut_audio_extra_tags[]
int event_flags
Flags for the user to detect events happening on the stream. 
static int get_str(AVIOContext *bc, char *string, unsigned int maxlen)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used). 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) 
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext. 
AVIndexEntry * index_entries
Only used if the format does not support seeking natively. 
AVFormatInternal * internal
An opaque field for libavformat internal usage. 
int event_flags
Flags for the user to detect events happening on the file. 
static void set_disposition_bits(AVFormatContext *avf, char *value, int stream_id)
void * av_tree_find(const AVTreeNode *t, void *key, int(*cmp)(const void *key, const void *b), void *next[2])
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward. 
int ff_nut_sp_pos_cmp(const void *a, const void *b)
static int decode_main_header(NUTContext *nut)
void * av_calloc(size_t nmemb, size_t size)
Non-inlined equivalent of av_mallocz_array(). 
const uint8_t * header[128]
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, uint8_t *header_idx, int frame_code)
static int64_t nut_read_timestamp(AVFormatContext *s, int stream_index, int64_t *pos_arg, int64_t pos_limit)
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
Opaque data information usually continuous. 
static int nut_probe(AVProbeData *p)
enum AVCodecID av_codec_get_id(const struct AVCodecTag *const *tags, unsigned int tag)
Get the AVCodecID for the given codec tag tag. 
const AVCodecTag ff_codec_movvideo_tags[]
unsigned int avio_rb32(AVIOContext *s)
static av_cold int end(AVCodecContext *avctx)
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file. 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
AVStream ** streams
A list of all streams in the file. 
const AVMetadataConv ff_nut_metadata_conv[]
static double av_q2d(AVRational a)
Convert an AVRational to a double. 
static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code)
int ff_nut_sp_pts_cmp(const void *a, const void *b)
#define AVERROR_EOF
End of file. 
static av_cold int read_close(AVFormatContext *ctx)
#define AV_LOG_VERBOSE
Detailed information. 
const AVCodecTag ff_nut_data_tags[]
uint64_t avio_rb64(AVIOContext *s)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext. 
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf. 
#define AV_PKT_FLAG_KEY
The packet contains a keyframe. 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers. 
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values. 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
AVDictionary * metadata
Metadata that applies to the whole file. 
void ff_nut_free_sp(NUTContext *nut)
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette...
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp. 
unsigned int avio_rl32(AVIOContext *s)
discard all bidirectional frames 
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: 
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int video_delay
Video only. 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
enum AVMediaType codec_type
General type of the encoded data. 
simple assert() macros that are a bit more flexible than ISO C assert(). 
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands. 
static int nut_read_packet(AVFormatContext *s, AVPacket *pkt)
const AVCodecTag ff_nut_audio_tags[]
static int decode_stream_header(NUTContext *nut)
const AVCodecTag ff_codec_wav_tags[]
int flags
A combination of AV_PKT_FLAG values. 
int extradata_size
Size of the extradata content in bytes. 
int avio_r8(AVIOContext *s)
static int nut_read_close(AVFormatContext *s)
int buf_size
Size of buf except extra allocated bytes. 
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. 
unsigned int nb_streams
Number of elements in AVFormatContext.streams. 
void ffio_init_checksum(AVIOContext *s, unsigned long(*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum)
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. 
void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val)
#define AV_TIME_BASE
Internal time base represented as integer. 
const AVCodecTag ff_codec_bmp_tags[]
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare. 
static uint64_t find_any_startcode(AVIOContext *bc, int64_t pos)
GLsizei GLboolean const GLfloat * value
unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
static int find_and_decode_index(NUTContext *nut)
int64_t ff_lsb2full(StreamContext *stream, int64_t lsb)
internal header for RIFF based (de)muxers do NOT include this in end user applications ...
static uint64_t get_fourcc(AVIOContext *bc)
static int get_packetheader(NUTContext *nut, AVIOContext *bc, int calculate_checksum, uint64_t startcode)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
struct AVTreeNode * syncpoints
static int nut_read_header(AVFormatContext *s)
static int read_header(FFV1Context *f)
static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file. 
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
static int read_sm_data(AVFormatContext *s, AVIOContext *bc, AVPacket *pkt, int is_meta, int64_t maxpos)
#define AV_LOG_INFO
Standard information. 
const AVCodecTag ff_nut_subtitle_tags[]
#define AV_TIME_BASE_Q
Internal time base represented as fractional value. 
AVIOContext * pb
I/O context. 
void av_packet_unref(AVPacket *pkt)
Wipe the packet. 
Data found in BlockAdditional element of matroska container. 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry. 
#define GET_V(dst, check)
Rational number (pair of numerator and denominator). 
Recommmends skipping the specified number of samples. 
unsigned long ffio_get_checksum(AVIOContext *s)
static int skip_reserved(AVIOContext *bc, int64_t pos)
static int64_t find_startcode(AVIOContext *bc, uint64_t code, int64_t pos)
Find the given startcode. 
This structure contains the data a format has to probe a file. 
static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags)
static int64_t pts
Global timestamp for the audio frames. 
static int64_t find_duration(NUTContext *nut, int64_t filesize)
int sample_rate
Audio only. 
const Dispositions ff_nut_dispositions[]
unsigned int avio_rl16(AVIOContext *s)
static int decode_info_header(NUTContext *nut)
FrameCode frame_code[256]
int disposition
AV_DISPOSITION_* bit field. 
const AVCodecTag ff_nut_video_tags[]
int ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts)
#define SYNCPOINT_STARTCODE
int eof_reached
true if eof reached 
AVInputFormat ff_nut_demuxer
static int64_t get_s(AVIOContext *bc)
void * priv_data
Format private data. 
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent. 
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds. 
AVCodecParameters * codecpar
#define av_malloc_array(a, b)
int avio_feof(AVIOContext *s)
feof() equivalent for AVIOContext. 
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC). 
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet. 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed. 
AVRational r_frame_rate
Real base framerate of the stream. 
const AVCodecTag *const ff_nut_codec_tags[]
This structure stores compressed data. 
uint64_t avio_rl64(AVIOContext *s)
unsigned int time_base_count
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
#define AV_NOPTS_VALUE
Undefined timestamp value. 
unsigned int max_distance