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_VERSION 3
40
41
typedef
enum
{
42
FLAG_KEY
= 1,
///<if set, frame is keyframe
43
FLAG_EOR
= 2,
///<if set, stream has no relevance on presentation. (EOR)
44
FLAG_CODED_PTS
= 8,
///<if set, coded_pts is in the frame header
45
FLAG_STREAM_ID
= 16,
///<if set, stream_id is coded in the frame header
46
FLAG_SIZE_MSB
= 32,
///<if set, data_size_msb is at frame header, otherwise data_size_msb is 0
47
FLAG_CHECKSUM
= 64,
///<if set, the frame header contains a checksum
48
FLAG_RESERVED
= 128,
///<if set, reserved_count is coded in the frame header
49
FLAG_HEADER_IDX
=1024,
///<If set, header_idx is coded in the frame header.
50
FLAG_MATCH_TIME
=2048,
///<If set, match_time_delta is coded in the frame header
51
FLAG_CODED
=4096,
///<if set, coded_flags are stored in the frame header
52
FLAG_INVALID
=8192,
///<if set, frame_code is invalid
53
}
Flag
;
54
55
typedef
struct
Syncpoint
{
56
uint64_t
pos
;
57
uint64_t
back_ptr
;
58
// uint64_t global_key_pts;
59
int64_t
ts
;
60
}
Syncpoint
;
61
62
typedef
struct
FrameCode
{
63
uint16_t
flags
;
64
uint8_t
stream_id
;
65
uint16_t
size_mul
;
66
uint16_t
size_lsb
;
67
int16_t
pts_delta
;
68
uint8_t
reserved_count
;
69
uint8_t
header_idx
;
70
}
FrameCode
;
71
72
typedef
struct
StreamContext
{
73
int
last_flags
;
74
int
skip_until_key_frame
;
75
int64_t
last_pts
;
76
int
time_base_id
;
77
AVRational
*
time_base
;
78
int
msb_pts_shift
;
79
int
max_pts_distance
;
80
int
decode_delay
;
//FIXME duplicate of has_b_frames
81
int64_t *
keyframe_pts
;
82
}
StreamContext
;
83
84
typedef
struct
ChapterContext
{
85
AVRational
*
time_base
;
86
}
ChapterContext
;
87
88
typedef
struct
NUTContext
{
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
;
///< stores the next startcode if it has already been parsed but the stream is not seekable
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
int
sp_count
;
105
int64_t
max_pts
;
106
AVRational
*
max_pts_tb
;
107
}
NUTContext
;
108
109
extern
const
AVCodecTag
ff_nut_subtitle_tags
[];
110
extern
const
AVCodecTag
ff_nut_video_tags
[];
111
extern
const
AVCodecTag
ff_nut_audio_tags
[];
112
extern
const
AVCodecTag
ff_nut_data_tags
[];
113
114
extern
const
AVCodecTag
*
const
ff_nut_codec_tags
[];
115
116
typedef
struct
Dispositions
{
117
char
str
[9];
118
int
flag
;
119
}
Dispositions
;
120
121
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t
val
);
122
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb);
123
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
124
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
125
int
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts);
126
void
ff_nut_free_sp
(
NUTContext
*nut);
127
128
extern
const
Dispositions
ff_nut_dispositions
[];
129
130
extern
const
AVMetadataConv
ff_nut_metadata_conv
[];
131
132
#endif
/* AVFORMAT_NUT_H */
Generated on Sat Jan 25 2014 19:52:04 for FFmpeg by
1.8.2