FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
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 FFmpeg.
6
*
7
* FFmpeg 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
* FFmpeg 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 FFmpeg; 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 "
avformat.h
"
26
#include "
internal.h
"
27
#include "
metadata.h
"
28
29
#define MAIN_STARTCODE (0x7A561F5F04ADULL + (((uint64_t)('N'<<8) + 'M')<<48))
30
#define STREAM_STARTCODE (0x11405BF2F9DBULL + (((uint64_t)('N'<<8) + 'S')<<48))
31
#define SYNCPOINT_STARTCODE (0xE4ADEECA4569ULL + (((uint64_t)('N'<<8) + 'K')<<48))
32
#define INDEX_STARTCODE (0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48))
33
#define INFO_STARTCODE (0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48))
34
35
#define ID_STRING "nut/multimedia container\0"
36
37
#define MAX_DISTANCE (1024*32-1)
38
39
#define NUT_MAX_VERSION 4
40
#define NUT_STABLE_VERSION 3
41
#define NUT_MIN_VERSION 2
42
43
typedef
enum
{
44
FLAG_KEY
= 1,
///<if set, frame is keyframe
45
FLAG_EOR
= 2,
///<if set, stream has no relevance on presentation. (EOR)
46
FLAG_CODED_PTS
= 8,
///<if set, coded_pts is in the frame header
47
FLAG_STREAM_ID
= 16,
///<if set, stream_id is coded in the frame header
48
FLAG_SIZE_MSB
= 32,
///<if set, data_size_msb is at frame header, otherwise data_size_msb is 0
49
FLAG_CHECKSUM
= 64,
///<if set, the frame header contains a checksum
50
FLAG_RESERVED
= 128,
///<if set, reserved_count is coded in the frame header
51
FLAG_SM_DATA
= 256,
///<if set, side / meta data is stored in the frame header.
52
FLAG_HEADER_IDX
=1024,
///<If set, header_idx is coded in the frame header.
53
FLAG_MATCH_TIME
=2048,
///<If set, match_time_delta is coded in the frame header
54
FLAG_CODED
=4096,
///<if set, coded_flags are stored in the frame header
55
FLAG_INVALID
=8192,
///<if set, frame_code is invalid
56
}
Flag
;
57
58
typedef
struct
Syncpoint
{
59
uint64_t
pos
;
60
uint64_t
back_ptr
;
61
// uint64_t global_key_pts;
62
int64_t
ts
;
63
}
Syncpoint
;
64
65
typedef
struct
FrameCode
{
66
uint16_t
flags
;
67
uint8_t
stream_id
;
68
uint16_t
size_mul
;
69
uint16_t
size_lsb
;
70
int16_t
pts_delta
;
71
uint8_t
reserved_count
;
72
uint8_t
header_idx
;
73
}
FrameCode
;
74
75
typedef
struct
StreamContext
{
76
int
last_flags
;
77
int
skip_until_key_frame
;
78
int64_t
last_pts
;
79
int
time_base_id
;
80
AVRational
*
time_base
;
81
int
msb_pts_shift
;
82
int
max_pts_distance
;
83
int
decode_delay
;
//FIXME duplicate of has_b_frames
84
int64_t *
keyframe_pts
;
85
}
StreamContext
;
86
87
typedef
struct
ChapterContext
{
88
AVRational
*
time_base
;
89
}
ChapterContext
;
90
91
typedef
struct
NUTContext
{
92
const
AVClass
*
av_class
;
93
AVFormatContext
*
avf
;
94
// int written_packet_size;
95
// int64_t packet_start;
96
FrameCode
frame_code
[256];
97
uint8_t
header_len
[128];
98
const
uint8_t
*
header
[128];
99
uint64_t
next_startcode
;
///< stores the next startcode if it has already been parsed but the stream is not seekable
100
StreamContext
*
stream
;
101
ChapterContext
*
chapter
;
102
unsigned
int
max_distance
;
103
unsigned
int
time_base_count
;
104
int64_t
last_syncpoint_pos
;
105
int
header_count
;
106
AVRational
*
time_base
;
107
struct
AVTreeNode
*
syncpoints
;
108
int
sp_count
;
109
int
write_index
;
110
int64_t
max_pts
;
111
AVRational
*
max_pts_tb
;
112
#define NUT_BROADCAST 1 // use extended syncpoints
113
#define NUT_PIPE 2 // do not write syncpoints
114
int
flags
;
115
int
version
;
// version currently in use
116
int
minor_version
;
117
}
NUTContext
;
118
119
extern
const
AVCodecTag
ff_nut_subtitle_tags
[];
120
extern
const
AVCodecTag
ff_nut_video_tags
[];
121
extern
const
AVCodecTag
ff_nut_audio_tags
[];
122
extern
const
AVCodecTag
ff_nut_audio_extra_tags
[];
123
extern
const
AVCodecTag
ff_nut_data_tags
[];
124
125
extern
const
AVCodecTag
*
const
ff_nut_codec_tags
[];
126
127
typedef
struct
Dispositions
{
128
char
str
[9];
129
int
flag
;
130
}
Dispositions
;
131
132
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t
val
);
133
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb);
134
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
135
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
136
int
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts);
137
void
ff_nut_free_sp
(
NUTContext
*nut);
138
139
extern
const
Dispositions
ff_nut_dispositions
[];
140
141
extern
const
AVMetadataConv
ff_nut_metadata_conv
[];
142
143
#endif
/* AVFORMAT_NUT_H */
Generated on Fri Dec 5 2014 04:42:13 for FFmpeg by
1.8.2