aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorClément Bœsch <clement.boesch@smartjog.com>2012-09-17 16:16:16 +0200
committerClément Bœsch <ubitux@gmail.com>2012-09-21 15:14:11 +0200
commit7bc70930ddc487712419e65ebca4d77868a20ffb (patch)
tree8b51f174111ae0cf1f725d0b953987c9dea76d4a /libavformat
parent406cdddbdd229cead581eb1c7b978a2c59453b24 (diff)
downloadffmpeg-7bc70930ddc487712419e65ebca4d77868a20ffb.tar.gz
lavf/movenc: add F4V flavor.
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/allformats.c1
-rw-r--r--libavformat/movenc.c31
-rw-r--r--libavformat/movenc.h1
3 files changed, 33 insertions, 0 deletions
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index 44ffd8a65f..8dd917b21a 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -93,6 +93,7 @@ void av_register_all(void)
REGISTER_DEMUXER (EA, ea);
REGISTER_DEMUXER (EA_CDATA, ea_cdata);
REGISTER_MUXDEMUX (EAC3, eac3);
+ REGISTER_MUXER (F4V, f4v);
REGISTER_MUXDEMUX (FFM, ffm);
REGISTER_MUXDEMUX (FFMETADATA, ffmetadata);
REGISTER_MUXDEMUX (FILMSTRIP, filmstrip);
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 5e20a5c3f9..fffa88c95f 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -933,6 +933,14 @@ static const AVCodecTag codec_3gp_tags[] = {
{ AV_CODEC_ID_NONE, 0 },
};
+static const AVCodecTag codec_f4v_tags[] = { // XXX: add GIF/PNG/JPEG?
+ { AV_CODEC_ID_MP3, MKTAG('.','m','p','3') },
+ { AV_CODEC_ID_AAC, MKTAG('m','p','4','a') },
+ { AV_CODEC_ID_H264, MKTAG('a','v','c','1') },
+ { AV_CODEC_ID_VP6F, MKTAG('V','P','6','F') },
+ { AV_CODEC_ID_NONE, 0 },
+};
+
static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
{
int tag;
@@ -947,6 +955,8 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
tag = ipod_get_codec_tag(s, track);
else if (track->mode & MODE_3GP)
tag = ff_codec_get_tag(codec_3gp_tags, track->enc->codec_id);
+ else if (track->mode & MODE_F4V)
+ tag = ff_codec_get_tag(codec_f4v_tags, track->enc->codec_id);
else
tag = mov_get_codec_tag(s, track);
@@ -2697,6 +2707,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
ffio_wfourcc(pb, has_video ? "M4V ":"M4A ");
else if (mov->mode == MODE_ISM)
ffio_wfourcc(pb, "isml");
+ else if (mov->mode == MODE_F4V)
+ ffio_wfourcc(pb, "f4v ");
else
ffio_wfourcc(pb, "qt ");
@@ -3388,6 +3400,7 @@ static int mov_write_header(AVFormatContext *s)
else if (!strcmp("psp", s->oformat->name)) mov->mode = MODE_PSP;
else if (!strcmp("ipod",s->oformat->name)) mov->mode = MODE_IPOD;
else if (!strcmp("ismv",s->oformat->name)) mov->mode = MODE_ISM;
+ else if (!strcmp("f4v", s->oformat->name)) mov->mode = MODE_F4V;
mov_write_ftyp_tag(pb,s);
if (mov->mode == MODE_PSP) {
@@ -3814,3 +3827,21 @@ AVOutputFormat ff_ismv_muxer = {
.priv_class = &ismv_muxer_class,
};
#endif
+#if CONFIG_F4V_MUXER
+MOV_CLASS(f4v)
+AVOutputFormat ff_f4v_muxer = {
+ .name = "f4v",
+ .long_name = NULL_IF_CONFIG_SMALL("F4V Adobe Flash Video"),
+ .mime_type = "application/f4v",
+ .extensions = "f4v",
+ .priv_data_size = sizeof(MOVMuxContext),
+ .audio_codec = AV_CODEC_ID_AAC,
+ .video_codec = AV_CODEC_ID_H264,
+ .write_header = mov_write_header,
+ .write_packet = mov_write_packet,
+ .write_trailer = mov_write_trailer,
+ .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH,
+ .codec_tag = (const AVCodecTag* const []){ codec_f4v_tags, 0 },
+ .priv_class = &f4v_muxer_class,
+};
+#endif
diff --git a/libavformat/movenc.h b/libavformat/movenc.h
index 72427d8cfd..b4b3f1c6ac 100644
--- a/libavformat/movenc.h
+++ b/libavformat/movenc.h
@@ -39,6 +39,7 @@
#define MODE_3G2 0x10
#define MODE_IPOD 0x20
#define MODE_ISM 0x40
+#define MODE_F4V 0x80
typedef struct MOVIentry {
uint64_t pos;