mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-06-19 19:03:00 +02:00
lavf/movenc: add F4V flavor.
This commit is contained in:
committed by
Clément Bœsch
parent
406cdddbdd
commit
7bc70930dd
@@ -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"
|
|||||||
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)
|
|||||||
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[] = {
|
|||||||
{ 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 = {
|
|||||||
.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 @@
|
|||||||
#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;
|
||||||
|
|||||||
Reference in New Issue
Block a user