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 "libavutil/fifo.h"
27#include "avformat.h"
28#include "avio.h"
29#include "riff.h"    /* for CodecTag */
30
31/* should have a generic way to indicate probable size */
32#define DUMMY_FILE_SIZE   (100 * 1024 * 1024)
33#define DUMMY_DURATION    600 /* in seconds */
34
35#define TAG_END           0
36#define TAG_SHOWFRAME     1
37#define TAG_DEFINESHAPE   2
38#define TAG_FREECHARACTER 3
39#define TAG_PLACEOBJECT   4
40#define TAG_REMOVEOBJECT  5
41#define TAG_STREAMHEAD    18
42#define TAG_STREAMBLOCK   19
43#define TAG_JPEG2         21
44#define TAG_PLACEOBJECT2  26
45#define TAG_STREAMHEAD2   45
46#define TAG_VIDEOSTREAM   60
47#define TAG_VIDEOFRAME    61
48#define TAG_FILEATTRIBUTES 69
49
50#define TAG_LONG         0x100
51
52/* flags for shape definition */
53#define FLAG_MOVETO      0x01
54#define FLAG_SETFILL0    0x02
55#define FLAG_SETFILL1    0x04
56
57#define AUDIO_FIFO_SIZE 65536
58
59/* character id used */
60#define BITMAP_ID 0
61#define VIDEO_ID 0
62#define SHAPE_ID  1
63
64#undef NDEBUG
65#include <assert.h>
66
67typedef struct {
68    int audio_stream_index;
69    int64_t duration_pos;
70    int64_t tag_pos;
71    int64_t vframes_pos;
72    int samples_per_frame;
73    int sound_samples;
74    int swf_frame_number;
75    int video_frame_number;
76    int frame_rate;
77    int tag;
78    AVFifoBuffer audio_fifo;
79    AVCodecContext *audio_enc, *video_enc;
80} SWFContext;
81
82static const AVCodecTag swf_codec_tags[] = {
83    {CODEC_ID_FLV1, 0x02},
84    {CODEC_ID_VP6F, 0x04},
85    {0, 0},
86};
87
88static const AVCodecTag swf_audio_codec_tags[] = {
89    {CODEC_ID_PCM_S16LE,  0x00},
90    {CODEC_ID_ADPCM_SWF,  0x01},
91    {CODEC_ID_MP3,        0x02},
92    {CODEC_ID_PCM_S16LE,  0x03},
93  //{CODEC_ID_NELLYMOSER, 0x06},
94    {0, 0},
95};
96
97#endif /* AVFORMAT_SWF_H */
98