Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavformat
nut.h
Go to the documentation of this file.
1
/*
2
* "NUT" Container Format (de)muxer
3
* Copyright (c) 2006 Michael Niedermayer
4
*
5
* This file is part of Libav.
6
*
7
* Libav is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* Libav is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with Libav; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#ifndef AVFORMAT_NUT_H
23
#define AVFORMAT_NUT_H
24
25
//#include <limits.h>
26
//#include "libavutil/adler32.h"
27
//#include "libavcodec/mpegaudio.h"
28
#include "
avformat.h
"
29
#include "
riff.h
"
30
#include "
metadata.h
"
31
32
#define MAIN_STARTCODE (0x7A561F5F04ADULL + (((uint64_t)('N'<<8) + 'M')<<48))
33
#define STREAM_STARTCODE (0x11405BF2F9DBULL + (((uint64_t)('N'<<8) + 'S')<<48))
34
#define SYNCPOINT_STARTCODE (0xE4ADEECA4569ULL + (((uint64_t)('N'<<8) + 'K')<<48))
35
#define INDEX_STARTCODE (0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48))
36
#define INFO_STARTCODE (0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48))
37
38
#define ID_STRING "nut/multimedia container\0"
39
40
#define MAX_DISTANCE (1024*32-1)
41
42
typedef
enum
{
43
FLAG_KEY
= 1,
44
FLAG_EOR
= 2,
45
FLAG_CODED_PTS
= 8,
46
FLAG_STREAM_ID
= 16,
47
FLAG_SIZE_MSB
= 32,
48
FLAG_CHECKSUM
= 64,
49
FLAG_RESERVED
= 128,
50
FLAG_HEADER_IDX
=1024,
51
FLAG_MATCH_TIME
=2048,
52
FLAG_CODED
=4096,
53
FLAG_INVALID
=8192,
54
}
Flag
;
55
56
typedef
struct
{
57
uint64_t
pos
;
58
uint64_t
back_ptr
;
59
// uint64_t global_key_pts;
60
int64_t
ts
;
61
}
Syncpoint
;
62
63
typedef
struct
{
64
uint16_t
flags
;
65
uint8_t
stream_id
;
66
uint16_t
size_mul
;
67
uint16_t
size_lsb
;
68
int16_t
pts_delta
;
69
uint8_t
reserved_count
;
70
uint8_t
header_idx
;
71
}
FrameCode
;
72
73
typedef
struct
{
74
int
last_flags
;
75
int
skip_until_key_frame
;
76
int64_t
last_pts
;
77
int
time_base_id
;
78
AVRational
*
time_base
;
79
int
msb_pts_shift
;
80
int
max_pts_distance
;
81
int
decode_delay
;
//FIXME duplicate of has_b_frames
82
}
StreamContext
;
83
84
typedef
struct
{
85
AVRational
*
time_base
;
86
}
ChapterContext
;
87
88
typedef
struct
{
89
AVFormatContext
*
avf
;
90
// int written_packet_size;
91
// int64_t packet_start;
92
FrameCode
frame_code[256];
93
uint8_t header_len[128];
94
const
uint8_t *header[128];
95
uint64_t
next_startcode
;
96
StreamContext
*
stream
;
97
ChapterContext
*
chapter
;
98
unsigned
int
max_distance
;
99
unsigned
int
time_base_count
;
100
int64_t
last_syncpoint_pos
;
101
int
header_count
;
102
AVRational
*
time_base
;
103
struct
AVTreeNode
*
syncpoints
;
104
}
NUTContext
;
105
106
extern
const
AVCodecTag
ff_nut_subtitle_tags
[];
107
extern
const
AVCodecTag
ff_nut_video_tags
[];
108
109
typedef
struct
{
110
char
str[9];
111
int
flag
;
112
}
Dispositions
;
113
114
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t val);
115
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb);
116
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*a,
const
Syncpoint
*
b
);
117
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*a,
const
Syncpoint
*
b
);
118
void
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts);
119
void
ff_nut_free_sp
(
NUTContext
*nut);
120
121
extern
const
Dispositions
ff_nut_dispositions
[];
122
123
extern
const
AVMetadataConv
ff_nut_metadata_conv
[];
124
125
#endif
/* AVFORMAT_NUT_H */