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
This commit is contained in:
parent
76e4864583
commit
dfb400a8ea
@ -29,6 +29,7 @@ OBJS-$(CONFIG_AU_MUXER) += au.o
|
|||||||
OBJS-$(CONFIG_AVI_DEMUXER) += avidec.o riff.o
|
OBJS-$(CONFIG_AVI_DEMUXER) += avidec.o riff.o
|
||||||
OBJS-$(CONFIG_AVI_MUXER) += avienc.o riff.o
|
OBJS-$(CONFIG_AVI_MUXER) += avienc.o riff.o
|
||||||
OBJS-$(CONFIG_AVISYNTH) += avisynth.o
|
OBJS-$(CONFIG_AVISYNTH) += avisynth.o
|
||||||
|
OBJS-$(CONFIG_AVM2_MUXER) += swf.o
|
||||||
OBJS-$(CONFIG_AVS_DEMUXER) += avs.o vocdec.o voc.o
|
OBJS-$(CONFIG_AVS_DEMUXER) += avs.o vocdec.o voc.o
|
||||||
OBJS-$(CONFIG_BETHSOFTVID_DEMUXER) += bethsoftvid.o
|
OBJS-$(CONFIG_BETHSOFTVID_DEMUXER) += bethsoftvid.o
|
||||||
OBJS-$(CONFIG_C93_DEMUXER) += c93.o vocdec.o voc.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 (SOL, sol);
|
||||||
REGISTER_DEMUXER (STR, str);
|
REGISTER_DEMUXER (STR, str);
|
||||||
REGISTER_MUXDEMUX (SWF, swf);
|
REGISTER_MUXDEMUX (SWF, swf);
|
||||||
|
REGISTER_MUXER (AVM2, avm2);
|
||||||
REGISTER_MUXER (TG2, tg2);
|
REGISTER_MUXER (TG2, tg2);
|
||||||
REGISTER_MUXER (TGP, tgp);
|
REGISTER_MUXER (TGP, tgp);
|
||||||
REGISTER_DEMUXER (THP, thp);
|
REGISTER_DEMUXER (THP, thp);
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
#ifndef FFMPEG_AVFORMAT_H
|
#ifndef FFMPEG_AVFORMAT_H
|
||||||
#define FFMPEG_AVFORMAT_H
|
#define FFMPEG_AVFORMAT_H
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT ((52<<16)+(4<<8)+0)
|
#define LIBAVFORMAT_VERSION_INT ((52<<16)+(5<<8)+0)
|
||||||
#define LIBAVFORMAT_VERSION 52.4.0
|
#define LIBAVFORMAT_VERSION 52.5.0
|
||||||
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
|
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
|
||||||
|
|
||||||
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#define TAG_STREAMHEAD2 45
|
#define TAG_STREAMHEAD2 45
|
||||||
#define TAG_VIDEOSTREAM 60
|
#define TAG_VIDEOSTREAM 60
|
||||||
#define TAG_VIDEOFRAME 61
|
#define TAG_VIDEOFRAME 61
|
||||||
|
#define TAG_FILEATTRIBUTES 69
|
||||||
|
|
||||||
#define TAG_LONG 0x100
|
#define TAG_LONG 0x100
|
||||||
|
|
||||||
@ -249,6 +250,7 @@ static int swf_write_header(AVFormatContext *s)
|
|||||||
PutBitContext p;
|
PutBitContext p;
|
||||||
uint8_t buf1[256];
|
uint8_t buf1[256];
|
||||||
int i, width, height, rate, rate_base;
|
int i, width, height, rate, rate_base;
|
||||||
|
int is_avm2;
|
||||||
|
|
||||||
swf->audio_in_pos = 0;
|
swf->audio_in_pos = 0;
|
||||||
swf->sound_samples = 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;
|
swf->samples_per_frame = (audio_enc->sample_rate * rate_base) / rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_avm2 = !strcmp("avm2", s->oformat->name);
|
||||||
|
|
||||||
put_tag(pb, "FWS");
|
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) */
|
put_byte(pb, 8); /* version (version 8 and above support VP6 codec) */
|
||||||
} else if (video_enc && video_enc->codec_id == CODEC_ID_FLV1) {
|
} else if (video_enc && video_enc->codec_id == CODEC_ID_FLV1) {
|
||||||
put_byte(pb, 6); /* version (version 6 and above support FLV1 codec) */
|
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);
|
swf->duration_pos = url_ftell(pb);
|
||||||
put_le16(pb, (uint16_t)(DUMMY_DURATION * (int64_t)rate / rate_base)); /* frame count */
|
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 */
|
/* define a shape with the jpeg inside */
|
||||||
if (video_enc && (video_enc->codec_id == CODEC_ID_VP6F ||
|
if (video_enc && (video_enc->codec_id == CODEC_ID_VP6F ||
|
||||||
video_enc->codec_id == CODEC_ID_FLV1)) {
|
video_enc->codec_id == CODEC_ID_FLV1)) {
|
||||||
@ -787,3 +800,17 @@ AVOutputFormat swf_muxer = {
|
|||||||
swf_write_trailer,
|
swf_write_trailer,
|
||||||
};
|
};
|
||||||
#endif
|
#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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user