Commit dfb400a8 authored by Paul Egan's avatar Paul Egan Committed by Baptiste Coudurier

new avm2 (flash 9) muxer, patch by Paul Egan, paulegan at mail dot com

Originally committed as revision 11574 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 76e48645
......@@ -29,6 +29,7 @@ OBJS-$(CONFIG_AU_MUXER) += au.o
OBJS-$(CONFIG_AVI_DEMUXER) += avidec.o riff.o
OBJS-$(CONFIG_AVI_MUXER) += avienc.o riff.o
OBJS-$(CONFIG_AVISYNTH) += avisynth.o
OBJS-$(CONFIG_AVM2_MUXER) += swf.o
OBJS-$(CONFIG_AVS_DEMUXER) += avs.o vocdec.o voc.o
OBJS-$(CONFIG_BETHSOFTVID_DEMUXER) += bethsoftvid.o
OBJS-$(CONFIG_C93_DEMUXER) += c93.o vocdec.o voc.o
......
......@@ -148,6 +148,7 @@ void av_register_all(void)
REGISTER_DEMUXER (SOL, sol);
REGISTER_DEMUXER (STR, str);
REGISTER_MUXDEMUX (SWF, swf);
REGISTER_MUXER (AVM2, avm2);
REGISTER_MUXER (TG2, tg2);
REGISTER_MUXER (TGP, tgp);
REGISTER_DEMUXER (THP, thp);
......
......@@ -21,8 +21,8 @@
#ifndef FFMPEG_AVFORMAT_H
#define FFMPEG_AVFORMAT_H
#define LIBAVFORMAT_VERSION_INT ((52<<16)+(4<<8)+0)
#define LIBAVFORMAT_VERSION 52.4.0
#define LIBAVFORMAT_VERSION_INT ((52<<16)+(5<<8)+0)
#define LIBAVFORMAT_VERSION 52.5.0
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
......
......@@ -40,6 +40,7 @@
#define TAG_STREAMHEAD2 45
#define TAG_VIDEOSTREAM 60
#define TAG_VIDEOFRAME 61
#define TAG_FILEATTRIBUTES 69
#define TAG_LONG 0x100
......@@ -249,6 +250,7 @@ static int swf_write_header(AVFormatContext *s)
PutBitContext p;
uint8_t buf1[256];
int i, width, height, rate, rate_base;
int is_avm2;
swf->audio_in_pos = 0;
swf->sound_samples = 0;
......@@ -305,8 +307,12 @@ static int swf_write_header(AVFormatContext *s)
swf->samples_per_frame = (audio_enc->sample_rate * rate_base) / rate;
}
is_avm2 = !strcmp("avm2", s->oformat->name);
put_tag(pb, "FWS");
if (video_enc && video_enc->codec_id == CODEC_ID_VP6F) {
if (is_avm2) {
put_byte(pb, 9);
} else if (video_enc && video_enc->codec_id == CODEC_ID_VP6F) {
put_byte(pb, 8); /* version (version 8 and above support VP6 codec) */
} else if (video_enc && video_enc->codec_id == CODEC_ID_FLV1) {
put_byte(pb, 6); /* version (version 6 and above support FLV1 codec) */
......@@ -321,6 +327,13 @@ static int swf_write_header(AVFormatContext *s)
swf->duration_pos = url_ftell(pb);
put_le16(pb, (uint16_t)(DUMMY_DURATION * (int64_t)rate / rate_base)); /* frame count */
/* avm2/swf v9 (also v8?) files require a file attribute tag */
if (is_avm2) {
put_swf_tag(s, TAG_FILEATTRIBUTES);
put_le32(pb, 1<<3); /* set ActionScript v3/AVM2 flag */
put_swf_end_tag(s);
}
/* define a shape with the jpeg inside */
if (video_enc && (video_enc->codec_id == CODEC_ID_VP6F ||
video_enc->codec_id == CODEC_ID_FLV1)) {
......@@ -787,3 +800,17 @@ AVOutputFormat swf_muxer = {
swf_write_trailer,
};
#endif
#ifdef CONFIG_AVM2_MUXER
AVOutputFormat avm2_muxer = {
"avm2",
"Flash 9 (AVM2) format",
"application/x-shockwave-flash",
"swf",
sizeof(SWFContext),
CODEC_ID_MP3,
CODEC_ID_FLV1,
swf_write_header,
swf_write_packet,
swf_write_trailer,
};
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment