projects
/
ffmpeg.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b3be41c
)
movenc: Add an F4V muxer
author
Clément Bœsch
<clement.boesch@smartjog.com>
Mon, 17 Sep 2012 14:16:16 +0000
(16:16 +0200)
committer
Martin Storsjö
<martin@martin.st>
Wed, 23 Oct 2013 08:17:03 +0000
(11:17 +0300)
F4V is Adobe's mp4/iso media variant, with the most significant
addition/change being supporting other flash codecs than just
aac/h264.
Signed-off-by: Martin Storsjö <martin@martin.st>
Changelog
patch
|
blob
|
history
configure
patch
|
blob
|
history
libavformat/allformats.c
patch
|
blob
|
history
libavformat/movenc.c
patch
|
blob
|
history
libavformat/movenc.h
patch
|
blob
|
history
libavformat/version.h
patch
|
blob
|
history
diff --git
a/Changelog
b/Changelog
index
fd12d90
..
4032d07
100644
(file)
--- a/
Changelog
+++ b/
Changelog
@@
-39,6
+39,7
@@
version 10:
- mux chapters in ASF files
- Opus in Ogg demuxing
- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
- mux chapters in ASF files
- Opus in Ogg demuxing
- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
+- F4V muxer
version 9:
version 9:
diff --git
a/configure
b/configure
index
7e52abf
..
7afbf04
100755
(executable)
--- a/
configure
+++ b/
configure
@@
-1814,6
+1814,7
@@
caf_demuxer_select="riffdec"
dirac_demuxer_select="dirac_parser"
dxa_demuxer_select="riffdec"
eac3_demuxer_select="ac3_parser"
dirac_demuxer_select="dirac_parser"
dxa_demuxer_select="riffdec"
eac3_demuxer_select="ac3_parser"
+f4v_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser"
hls_muxer_select="mpegts_muxer"
ipod_muxer_select="mov_muxer"
flac_demuxer_select="flac_parser"
hls_muxer_select="mpegts_muxer"
ipod_muxer_select="mov_muxer"
diff --git
a/libavformat/allformats.c
b/libavformat/allformats.c
index
585cf43
..
36a782b
100644
(file)
--- a/
libavformat/allformats.c
+++ b/
libavformat/allformats.c
@@
-100,6
+100,7
@@
void av_register_all(void)
REGISTER_DEMUXER (EA, ea);
REGISTER_DEMUXER (EA_CDATA, ea_cdata);
REGISTER_MUXDEMUX(EAC3, eac3);
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);
REGISTER_MUXDEMUX(FFM, ffm);
REGISTER_MUXDEMUX(FFMETADATA, ffmetadata);
REGISTER_MUXDEMUX(FILMSTRIP, filmstrip);
diff --git
a/libavformat/movenc.c
b/libavformat/movenc.c
index
1fe850b
..
8f7153a
100644
(file)
--- a/
libavformat/movenc.c
+++ b/
libavformat/movenc.c
@@
-888,6
+888,15
@@
static const AVCodecTag codec_3gp_tags[] = {
{ AV_CODEC_ID_NONE, 0 },
};
{ AV_CODEC_ID_NONE, 0 },
};
+static const AVCodecTag codec_f4v_tags[] = {
+ { 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_VP6A, MKTAG('V','P','6','A') },
+ { 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;
static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
{
int tag;
@@
-902,6
+911,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);
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);
else
tag = mov_get_codec_tag(s, track);
@@
-1030,7
+1041,11
@@
static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
mov_write_fiel_tag(pb, track);
else if (track->enc->codec_id == AV_CODEC_ID_VC1 && track->vos_len > 0)
mov_write_dvc1_tag(pb, track);
mov_write_fiel_tag(pb, track);
else if (track->enc->codec_id == AV_CODEC_ID_VC1 && track->vos_len > 0)
mov_write_dvc1_tag(pb, track);
- else if (track->vos_len > 0)
+ else if (track->enc->codec_id == AV_CODEC_ID_VP6F ||
+ track->enc->codec_id == AV_CODEC_ID_VP6A) {
+ /* Don't write any potential extradata here - the cropping
+ * is signalled via the normal width/height fields. */
+ } else if (track->vos_len > 0)
mov_write_glbl_tag(pb, track);
if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
mov_write_glbl_tag(pb, track);
if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
@@
-2546,6
+2561,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");
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 ");
else
ffio_wfourcc(pb, "qt ");
@@
-3149,6
+3166,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("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;
}
/* Set the FRAGMENT flag if any of the fragmentation methods are
}
/* Set the FRAGMENT flag if any of the fragmentation methods are
@@
-3650,3
+3668,21
@@
AVOutputFormat ff_ismv_muxer = {
.priv_class = &ismv_muxer_class,
};
#endif
.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 | AVFMT_TS_NEGATIVE,
+ .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
fefb20b
..
1b669e8
100644
(file)
--- a/
libavformat/movenc.h
+++ b/
libavformat/movenc.h
@@
-40,6
+40,7
@@
#define MODE_3G2 0x10
#define MODE_IPOD 0x20
#define MODE_ISM 0x40
#define MODE_3G2 0x10
#define MODE_IPOD 0x20
#define MODE_ISM 0x40
+#define MODE_F4V 0x80
typedef struct MOVIentry {
uint64_t pos;
typedef struct MOVIentry {
uint64_t pos;
diff --git
a/libavformat/version.h
b/libavformat/version.h
index
f6230b3
..
43431a5
100644
(file)
--- a/
libavformat/version.h
+++ b/
libavformat/version.h
@@
-30,8
+30,8
@@
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
-#define LIBAVFORMAT_VERSION_MINOR
6
-#define LIBAVFORMAT_VERSION_MICRO
2
+#define LIBAVFORMAT_VERSION_MINOR
7
+#define LIBAVFORMAT_VERSION_MICRO
0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \