Commit 7bc70930 authored by Clément Bœsch's avatar Clément Bœsch Committed by Clément Bœsch

lavf/movenc: add F4V flavor.

parent 406cdddb
...@@ -61,6 +61,7 @@ version next: ...@@ -61,6 +61,7 @@ version next:
- decimate filter ported from MPlayer - decimate filter ported from MPlayer
- RTP depacketization of JPEG - RTP depacketization of JPEG
- Smooth Streaming live segmenter muxer - Smooth Streaming live segmenter muxer
- F4V muxer
version 0.11: version 0.11:
......
...@@ -1793,6 +1793,7 @@ asf_stream_muxer_select="asf_muxer" ...@@ -1793,6 +1793,7 @@ asf_stream_muxer_select="asf_muxer"
avisynth_demuxer_deps="avisynth" avisynth_demuxer_deps="avisynth"
dirac_demuxer_select="dirac_parser" dirac_demuxer_select="dirac_parser"
eac3_demuxer_select="ac3_parser" eac3_demuxer_select="ac3_parser"
f4v_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser" flac_demuxer_select="flac_parser"
ipod_muxer_select="mov_muxer" ipod_muxer_select="mov_muxer"
libnut_demuxer_deps="libnut" libnut_demuxer_deps="libnut"
......
...@@ -93,6 +93,7 @@ void av_register_all(void) ...@@ -93,6 +93,7 @@ void av_register_all(void)
REGISTER_DEMUXER (EA, ea); REGISTER_DEMUXER (EA, ea);
REGISTER_DEMUXER (EA_CDATA, ea_cdata); REGISTER_DEMUXER (EA_CDATA, ea_cdata);
REGISTER_MUXDEMUX (EAC3, eac3); REGISTER_MUXDEMUX (EAC3, eac3);
REGISTER_MUXER (F4V, f4v);
REGISTER_MUXDEMUX (FFM, ffm); REGISTER_MUXDEMUX (FFM, ffm);
REGISTER_MUXDEMUX (FFMETADATA, ffmetadata); REGISTER_MUXDEMUX (FFMETADATA, ffmetadata);
REGISTER_MUXDEMUX (FILMSTRIP, filmstrip); REGISTER_MUXDEMUX (FILMSTRIP, filmstrip);
......
...@@ -933,6 +933,14 @@ static const AVCodecTag codec_3gp_tags[] = { ...@@ -933,6 +933,14 @@ static const AVCodecTag codec_3gp_tags[] = {
{ AV_CODEC_ID_NONE, 0 }, { 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) static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
{ {
int tag; int tag;
...@@ -947,6 +955,8 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track) ...@@ -947,6 +955,8 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
tag = ipod_get_codec_tag(s, track); tag = ipod_get_codec_tag(s, track);
else if (track->mode & MODE_3GP) else if (track->mode & MODE_3GP)
tag = ff_codec_get_tag(codec_3gp_tags, track->enc->codec_id); 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 else
tag = mov_get_codec_tag(s, track); tag = mov_get_codec_tag(s, track);
...@@ -2697,6 +2707,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s) ...@@ -2697,6 +2707,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
ffio_wfourcc(pb, has_video ? "M4V ":"M4A "); ffio_wfourcc(pb, has_video ? "M4V ":"M4A ");
else if (mov->mode == MODE_ISM) else if (mov->mode == MODE_ISM)
ffio_wfourcc(pb, "isml"); ffio_wfourcc(pb, "isml");
else if (mov->mode == MODE_F4V)
ffio_wfourcc(pb, "f4v ");
else else
ffio_wfourcc(pb, "qt "); ffio_wfourcc(pb, "qt ");
...@@ -3388,6 +3400,7 @@ static int mov_write_header(AVFormatContext *s) ...@@ -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("psp", s->oformat->name)) mov->mode = MODE_PSP;
else if (!strcmp("ipod",s->oformat->name)) mov->mode = MODE_IPOD; 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("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); mov_write_ftyp_tag(pb,s);
if (mov->mode == MODE_PSP) { if (mov->mode == MODE_PSP) {
...@@ -3814,3 +3827,21 @@ AVOutputFormat ff_ismv_muxer = { ...@@ -3814,3 +3827,21 @@ AVOutputFormat ff_ismv_muxer = {
.priv_class = &ismv_muxer_class, .priv_class = &ismv_muxer_class,
}; };
#endif #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
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#define MODE_3G2 0x10 #define MODE_3G2 0x10
#define MODE_IPOD 0x20 #define MODE_IPOD 0x20
#define MODE_ISM 0x40 #define MODE_ISM 0x40
#define MODE_F4V 0x80
typedef struct MOVIentry { typedef struct MOVIentry {
uint64_t pos; uint64_t pos;
......
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