FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
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 <limits.h>
26
//#include "libavutil/adler32.h"
27
//#include "libavcodec/mpegaudio.h"
28
#include "
avformat.h
"
29
#include "
internal.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,
///<if set, frame is keyframe
44
FLAG_EOR
= 2,
///<if set, stream has no relevance on presentation. (EOR)
45
FLAG_CODED_PTS
= 8,
///<if set, coded_pts is in the frame header
46
FLAG_STREAM_ID
= 16,
///<if set, stream_id is coded in the frame header
47
FLAG_SIZE_MSB
= 32,
///<if set, data_size_msb is at frame header, otherwise data_size_msb is 0
48
FLAG_CHECKSUM
= 64,
///<if set, the frame header contains a checksum
49
FLAG_RESERVED
= 128,
///<if set, reserved_count is coded in the frame header
50
FLAG_HEADER_IDX
=1024,
///<If set, header_idx is coded in the frame header.
51
FLAG_MATCH_TIME
=2048,
///<If set, match_time_delta is coded in the frame header
52
FLAG_CODED
=4096,
///<if set, coded_flags are stored in the frame header
53
FLAG_INVALID
=8192,
///<if set, frame_code is invalid
54
}
Flag
;
55
56
typedef
struct
Syncpoint
{
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
FrameCode
{
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
StreamContext
{
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
int64_t *
keyframe_pts
;
83
}
StreamContext
;
84
85
typedef
struct
ChapterContext
{
86
AVRational
*
time_base
;
87
}
ChapterContext
;
88
89
typedef
struct
NUTContext
{
90
AVFormatContext
*
avf
;
91
// int written_packet_size;
92
// int64_t packet_start;
93
FrameCode
frame_code
[256];
94
uint8_t
header_len
[128];
95
const
uint8_t
*
header
[128];
96
uint64_t
next_startcode
;
///< stores the next startcode if it has already been parsed but the stream is not seekable
97
StreamContext
*
stream
;
98
ChapterContext
*
chapter
;
99
unsigned
int
max_distance
;
100
unsigned
int
time_base_count
;
101
int64_t
last_syncpoint_pos
;
102
int
header_count
;
103
AVRational
*
time_base
;
104
struct
AVTreeNode
*
syncpoints
;
105
int
sp_count
;
106
int64_t
max_pts
;
107
AVRational
*
max_pts_tb
;
108
}
NUTContext
;
109
110
extern
const
AVCodecTag
ff_nut_subtitle_tags
[];
111
extern
const
AVCodecTag
ff_nut_video_tags
[];
112
extern
const
AVCodecTag
ff_nut_audio_tags
[];
113
extern
const
AVCodecTag
ff_nut_data_tags
[];
114
115
extern
const
AVCodecTag
*
const
ff_nut_codec_tags
[];
116
117
typedef
struct
Dispositions
{
118
char
str
[9];
119
int
flag
;
120
}
Dispositions
;
121
122
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t val);
123
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb);
124
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
125
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
);
126
void
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts);
127
void
ff_nut_free_sp
(
NUTContext
*nut);
128
129
extern
const
Dispositions
ff_nut_dispositions
[];
130
131
extern
const
AVMetadataConv
ff_nut_metadata_conv
[];
132
133
#endif
/* AVFORMAT_NUT_H */
Generated on Sat May 25 2013 03:58:48 for FFmpeg by
1.8.2