source: titan/libeplayer3/external/flv2mpeg4/src/flv.h @ 40322

Last change on this file since 40322 was 40322, checked in by obi, 7 years ago

update libeplayer3 new version only buffer

File size: 5.2 KB
Line 
1/*
2 * FLV structs and tables
3 *
4 * Copyright (c) 2006 vixy project
5 *
6 * This file contains the code that based on FFmpeg (http://ffmpeg.mplayerhq.hu/)
7 * See original copyright notice in /FFMPEG_CREDITS and /FFMPEG_IMPORTS
8 *
9 * This file is part of VIXY FLV Converter.
10 *
11 * 'VIXY FLV Converter' is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * 'VIXY FLV Converter' is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19 * Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with FFmpeg; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 */
25
26#ifndef FLV_H
27#define FLV_H
28
29//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
30#include <stdio.h>
31#include <stdlib.h>
32#include <memory.h>
33#include "bitreader.h"
34#include "bitwriter.h"
35
36//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
37typedef struct _BLOCK
38{
39        int     block[64];
40
41        int index;
42        int last_index;
43       
44} BLOCK;
45
46//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47typedef struct _MICROBLOCK
48{
49        BLOCK   block[6];
50        int dquant;
51       
52        int intra;
53        int skip;
54#define MV_TYPE_16X16   0
55#define MV_TYPE_8X8             1
56        int mv_type;
57        VLCDEC mv_x[4];
58        VLCDEC mv_y[4];
59       
60} MICROBLOCK;
61
62//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
63typedef struct _PICTURE
64{
65        int width;
66        int height;
67       
68
69#define FLV_I_TYPE              0
70#define FLV_P_TYPE              1
71
72        int picture_type;       // 0:I 1:P
73        int escape_type;        // 0:h263 1:flv(11bits)
74       
75        int qscale;
76       
77        int frame_number;
78
79} PICTURE;
80
81//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
82int decode_picture_header(BR* p, PICTURE* picture);
83int decode_I_mb(BR* p, MICROBLOCK* mb, int escape_type, int qscale);
84int decode_P_mb(BR* p, MICROBLOCK* mb, int escape_type, int qscale);
85
86void encode_picture_header(BW* bw, PICTURE* picture);
87void encode_I_mb(BW* bw, MICROBLOCK* mb, int escape_type);
88void encode_P_mb(BW* bw, MICROBLOCK* mb, int escape_type);
89
90//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
91
92static const uint16 rl_inter_vlc[103][2] = {
93{ 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
94{ 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
95{ 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
96{ 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
97{ 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
98{ 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
99{ 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
100{ 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
101{ 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
102{ 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
103{ 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
104{ 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
105{ 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
106{ 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
107{ 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
108{ 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
109{ 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
110{ 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
111{ 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
112{ 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
113{ 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
114{ 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
115{ 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
116{ 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
117{ 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
118{ 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
119};
120
121static const int8 rl_inter_level[102] = {
122  1,  2,  3,  4,  5,  6,  7,  8,
123  9, 10, 11, 12,  1,  2,  3,  4,
124  5,  6,  1,  2,  3,  4,  1,  2,
125  3,  1,  2,  3,  1,  2,  3,  1,
126  2,  3,  1,  2,  1,  2,  1,  2,
127  1,  2,  1,  1,  1,  1,  1,  1,
128  1,  1,  1,  1,  1,  1,  1,  1,
129  1,  1,  1,  2,  3,  1,  2,  1,
130  1,  1,  1,  1,  1,  1,  1,  1,
131  1,  1,  1,  1,  1,  1,  1,  1,
132  1,  1,  1,  1,  1,  1,  1,  1,
133  1,  1,  1,  1,  1,  1,  1,  1,
134  1,  1,  1,  1,  1,  1,
135};
136
137static const int8 rl_inter_run[102] = {
138  0,  0,  0,  0,  0,  0,  0,  0,
139  0,  0,  0,  0,  1,  1,  1,  1,
140  1,  1,  2,  2,  2,  2,  3,  3,
141  3,  4,  4,  4,  5,  5,  5,  6,
142  6,  6,  7,  7,  8,  8,  9,  9,
143 10, 10, 11, 12, 13, 14, 15, 16,
144 17, 18, 19, 20, 21, 22, 23, 24,
145 25, 26,  0,  0,  0,  1,  1,  2,
146  3,  4,  5,  6,  7,  8,  9, 10,
147 11, 12, 13, 14, 15, 16, 17, 18,
148 19, 20, 21, 22, 23, 24, 25, 26,
149 27, 28, 29, 30, 31, 32, 33, 34,
150 35, 36, 37, 38, 39, 40,
151};
152
153//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
154static const int rl_inter_n = 102;
155static const int rl_inter_last = 58;
156
157
158#endif // FLV_H
Note: See TracBrowser for help on using the repository browser.