Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavformat / swf.h
CommitLineData
2ba45a60
DM
1/*
2 * Flash Compatible Streaming Format common header.
3 * Copyright (c) 2000 Fabrice Bellard
4 * Copyright (c) 2003 Tinic Uro
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23#ifndef AVFORMAT_SWF_H
24#define AVFORMAT_SWF_H
25
26#include "config.h"
27
28#if CONFIG_ZLIB
29#include <zlib.h>
30#endif
31
32#include "libavutil/fifo.h"
33#include "avformat.h"
34#include "avio.h"
35#include "internal.h"
36
37/* should have a generic way to indicate probable size */
38#define DUMMY_FILE_SIZE (100 * 1024 * 1024)
39#define DUMMY_DURATION 600 /* in seconds */
40
41enum {
42 TAG_END = 0,
43 TAG_SHOWFRAME = 1,
44 TAG_DEFINESHAPE = 2,
45 TAG_FREECHARACTER = 3,
46 TAG_PLACEOBJECT = 4,
47 TAG_REMOVEOBJECT = 5,
48 TAG_DEFINEBITS = 6,
49 TAG_DEFINEBUTTON = 7,
50 TAG_JPEGTABLES = 8,
51 TAG_SETBACKGROUNDCOLOR = 9,
52 TAG_DEFINEFONT = 10,
53 TAG_DEFINETEXT = 11,
54 TAG_DOACTION = 12,
55 TAG_DEFINEFONTINFO = 13,
56 TAG_DEFINESOUND = 14,
57 TAG_STARTSOUND = 15,
58 TAG_DEFINEBUTTONSOUND = 17,
59 TAG_STREAMHEAD = 18,
60 TAG_STREAMBLOCK = 19,
61 TAG_DEFINEBITSLOSSLESS = 20,
62 TAG_JPEG2 = 21,
63 TAG_DEFINESHAPE2 = 22,
64 TAG_DEFINEBUTTONCXFORM = 23,
65 TAG_PROTECT = 24,
66 TAG_PLACEOBJECT2 = 26,
67 TAG_REMOVEOBJECT2 = 28,
68 TAG_DEFINESHAPE3 = 32,
69 TAG_DEFINETEXT2 = 33,
70 TAG_DEFINEBUTTON2 = 34,
71 TAG_DEFINEBITSJPEG3 = 35,
72 TAG_DEFINEBITSLOSSLESS2 = 36,
73 TAG_DEFINEEDITTEXT = 37,
74 TAG_DEFINESPRITE = 39,
75 TAG_FRAMELABEL = 43,
76 TAG_STREAMHEAD2 = 45,
77 TAG_DEFINEMORPHSHAPE = 46,
78 TAG_DEFINEFONT2 = 48,
79 TAG_EXPORTASSETS = 56,
80 TAG_IMPORTASSETS = 57,
81 TAG_ENABLEDEBUGGER = 58,
82 TAG_DOINITACTION = 59,
83 TAG_VIDEOSTREAM = 60,
84 TAG_VIDEOFRAME = 61,
85 TAG_DEFINEFONTINFO2 = 62,
86 TAG_ENABLEDEBUGGER2 = 64,
87 TAG_SCRIPTLIMITS = 65,
88 TAG_SETTABINDEX = 66,
89 TAG_FILEATTRIBUTES = 69,
90 TAG_PLACEOBJECT3 = 70,
91 TAG_IMPORTASSETS2 = 71,
92 TAG_DEFINEFONTALIGNZONES = 73,
93 TAG_CSMTEXTSETTINGS = 74,
94 TAG_DEFINEFONT3 = 75,
95 TAG_SYMBOLCLASS = 76,
96 TAG_METADATA = 77,
97 TAG_DEFINESCALINGGRID = 78,
98 TAG_DOABC = 82,
99 TAG_DEFINESHAPE4 = 83,
100 TAG_DEFINEMORPHSHAPE2 = 84,
101 TAG_DEFINESCENEANDFRAMELABELDATA = 86,
102 TAG_DEFINEBINARYDATA = 87,
103 TAG_DEFINEFONTNAME = 88,
104 TAG_STARTSOUND2 = 89,
105 TAG_DEFINEBITSJPEG4 = 90,
106 TAG_DEFINEFONT4 = 91,
107};
108
109#define TAG_LONG 0x100
110
111/* flags for shape definition */
112#define FLAG_MOVETO 0x01
113#define FLAG_SETFILL0 0x02
114#define FLAG_SETFILL1 0x04
115
116#define AUDIO_FIFO_SIZE 65536
117
118/* character id used */
119#define BITMAP_ID 0
120#define VIDEO_ID 0
121#define SHAPE_ID 1
122
123typedef struct SWFContext {
124 int64_t duration_pos;
125 int64_t tag_pos;
126 int64_t vframes_pos;
127 int samples_per_frame;
128 int sound_samples;
129 int swf_frame_number;
130 int video_frame_number;
131 int frame_rate;
132 int tag;
133 AVFifoBuffer *audio_fifo;
134 AVCodecContext *audio_enc, *video_enc;
135 AVStream *video_st;
136#if CONFIG_ZLIB
137 AVIOContext *zpb;
138#define ZBUF_SIZE 4096
139 uint8_t *zbuf_in;
140 uint8_t *zbuf_out;
141 z_stream zstream;
142#endif
143} SWFContext;
144
145extern const AVCodecTag ff_swf_codec_tags[];
146
147#endif /* AVFORMAT_SWF_H */