ffmpeg / libavformat / nut.h @ 93951943
History | View | Annotate | Download (3.75 KB)
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 "avformat.h" |
27 |
#include "crc.h" |
28 |
//#include "mpegaudio.h"
|
29 |
#include "riff.h" |
30 |
//#include "adler32.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_CODED =4096, ///<if set, coded_flags are stored in the frame header |
51 |
FLAG_INVALID =8192, ///<if set, frame_code is invalid |
52 |
}flag_t; |
53 |
|
54 |
typedef struct { |
55 |
uint64_t pos; |
56 |
uint64_t back_ptr; |
57 |
// uint64_t global_key_pts;
|
58 |
int64_t ts; |
59 |
} syncpoint_t; |
60 |
|
61 |
typedef struct { |
62 |
uint16_t flags; |
63 |
uint8_t stream_id; |
64 |
uint16_t size_mul; |
65 |
uint16_t size_lsb; |
66 |
int16_t pts_delta; |
67 |
uint8_t reserved_count; |
68 |
} FrameCode; // maybe s/FrameCode/framecode_t/ or change all to Java style but do not mix
|
69 |
|
70 |
typedef struct { |
71 |
int last_flags;
|
72 |
int skip_until_key_frame;
|
73 |
int64_t last_pts; |
74 |
int time_base_id;
|
75 |
AVRational *time_base; |
76 |
int msb_pts_shift;
|
77 |
int max_pts_distance;
|
78 |
int decode_delay; //FIXME duplicate of has_b_frames |
79 |
} StreamContext;// maybe s/StreamContext/streamcontext_t/
|
80 |
|
81 |
typedef struct { |
82 |
AVFormatContext *avf; |
83 |
// int written_packet_size;
|
84 |
// int64_t packet_start;
|
85 |
FrameCode frame_code[256];
|
86 |
uint64_t next_startcode; ///< stores the next startcode if it has already been parsed but the stream is not seekable
|
87 |
StreamContext *stream; |
88 |
unsigned int max_distance; |
89 |
unsigned int time_base_count; |
90 |
int64_t last_syncpoint_pos; |
91 |
int header_count;
|
92 |
AVRational *time_base; |
93 |
struct AVTreeNode *syncpoints;
|
94 |
} NUTContext; |
95 |
|
96 |
unsigned long av_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len); |
97 |
void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val);
|
98 |
int64_t ff_lsb2full(StreamContext *stream, int64_t lsb); |
99 |
int ff_nut_sp_pos_cmp(syncpoint_t *a, syncpoint_t *b);
|
100 |
int ff_nut_sp_pts_cmp(syncpoint_t *a, syncpoint_t *b);
|
101 |
void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts);
|
102 |
|
103 |
#endif /* AVFORMAT_NUT_H */ |