Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
42cb050a
Unverified
Commit
42cb050a
authored
Apr 08, 2016
by
Rodger Combs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf/movenc+dashenc: add automatic bitstream filtering
This is disabled by default when the empty_moov flag is enabled
parent
c972a28f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
124 additions
and
26 deletions
+124
-26
dashenc.c
libavformat/dashenc.c
+41
-2
movenc.c
libavformat/movenc.c
+83
-24
No files found.
libavformat/dashenc.c
View file @
42cb050a
...
@@ -551,7 +551,7 @@ static int write_manifest(AVFormatContext *s, int final)
...
@@ -551,7 +551,7 @@ static int write_manifest(AVFormatContext *s, int final)
return
avpriv_io_move
(
temp_filename
,
s
->
filename
);
return
avpriv_io_move
(
temp_filename
,
s
->
filename
);
}
}
static
int
dash_
write_header
(
AVFormatContext
*
s
)
static
int
dash_
init
(
AVFormatContext
*
s
)
{
{
DASHContext
*
c
=
s
->
priv_data
;
DASHContext
*
c
=
s
->
priv_data
;
int
ret
=
0
,
i
;
int
ret
=
0
,
i
;
...
@@ -643,7 +643,7 @@ static int dash_write_header(AVFormatContext *s)
...
@@ -643,7 +643,7 @@ static int dash_write_header(AVFormatContext *s)
os
->
init_start_pos
=
0
;
os
->
init_start_pos
=
0
;
av_dict_set
(
&
opts
,
"movflags"
,
"frag_custom+dash+delay_moov"
,
0
);
av_dict_set
(
&
opts
,
"movflags"
,
"frag_custom+dash+delay_moov"
,
0
);
if
((
ret
=
avformat_
write_header
(
ctx
,
&
opts
))
<
0
)
if
((
ret
=
avformat_
init_output
(
ctx
,
&
opts
))
<
0
)
return
ret
;
return
ret
;
os
->
ctx_inited
=
1
;
os
->
ctx_inited
=
1
;
avio_flush
(
ctx
->
pb
);
avio_flush
(
ctx
->
pb
);
...
@@ -682,6 +682,20 @@ static int dash_write_header(AVFormatContext *s)
...
@@ -682,6 +682,20 @@ static int dash_write_header(AVFormatContext *s)
av_log
(
s
,
AV_LOG_WARNING
,
"no video stream and no min seg duration set
\n
"
);
av_log
(
s
,
AV_LOG_WARNING
,
"no video stream and no min seg duration set
\n
"
);
return
AVERROR
(
EINVAL
);
return
AVERROR
(
EINVAL
);
}
}
return
0
;
}
static
int
dash_write_header
(
AVFormatContext
*
s
)
{
DASHContext
*
c
=
s
->
priv_data
;
int
i
,
ret
;
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
OutputStream
*
os
=
&
c
->
streams
[
i
];
if
((
ret
=
avformat_write_header
(
os
->
ctx
,
NULL
))
<
0
)
{
dash_free
(
s
);
return
ret
;
}
}
ret
=
write_manifest
(
s
,
0
);
ret
=
write_manifest
(
s
,
0
);
if
(
!
ret
)
if
(
!
ret
)
av_log
(
s
,
AV_LOG_VERBOSE
,
"Manifest written to: %s
\n
"
,
s
->
filename
);
av_log
(
s
,
AV_LOG_VERBOSE
,
"Manifest written to: %s
\n
"
,
s
->
filename
);
...
@@ -978,6 +992,29 @@ static int dash_write_trailer(AVFormatContext *s)
...
@@ -978,6 +992,29 @@ static int dash_write_trailer(AVFormatContext *s)
return
0
;
return
0
;
}
}
static
int
dash_check_bitstream
(
struct
AVFormatContext
*
s
,
const
AVPacket
*
avpkt
)
{
DASHContext
*
c
=
s
->
priv_data
;
OutputStream
*
os
=
&
c
->
streams
[
avpkt
->
stream_index
];
AVFormatContext
*
oc
=
os
->
ctx
;
if
(
oc
->
oformat
->
check_bitstream
)
{
int
ret
;
AVPacket
pkt
=
*
avpkt
;
pkt
.
stream_index
=
0
;
ret
=
oc
->
oformat
->
check_bitstream
(
oc
,
&
pkt
);
if
(
ret
==
1
)
{
AVStream
*
st
=
s
->
streams
[
avpkt
->
stream_index
];
AVStream
*
ost
=
oc
->
streams
[
0
];
st
->
internal
->
bsfcs
=
ost
->
internal
->
bsfcs
;
st
->
internal
->
nb_bsfcs
=
ost
->
internal
->
nb_bsfcs
;
ost
->
internal
->
bsfcs
=
NULL
;
ost
->
internal
->
nb_bsfcs
=
0
;
}
return
ret
;
}
return
1
;
}
#define OFFSET(x) offsetof(DASHContext, x)
#define OFFSET(x) offsetof(DASHContext, x)
#define E AV_OPT_FLAG_ENCODING_PARAM
#define E AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
options
[]
=
{
static
const
AVOption
options
[]
=
{
...
@@ -1008,10 +1045,12 @@ AVOutputFormat ff_dash_muxer = {
...
@@ -1008,10 +1045,12 @@ AVOutputFormat ff_dash_muxer = {
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_NOFILE
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_NOFILE
|
AVFMT_TS_NEGATIVE
,
.
init
=
dash_init
,
.
write_header
=
dash_write_header
,
.
write_header
=
dash_write_header
,
.
write_packet
=
dash_write_packet
,
.
write_packet
=
dash_write_packet
,
.
write_trailer
=
dash_write_trailer
,
.
write_trailer
=
dash_write_trailer
,
.
deinit
=
dash_free
,
.
deinit
=
dash_free
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
check_bitstream
=
dash_check_bitstream
,
.
priv_class
=
&
dash_class
,
.
priv_class
=
&
dash_class
,
};
};
libavformat/movenc.c
View file @
42cb050a
...
@@ -5459,11 +5459,10 @@ static int mov_create_dvd_sub_decoder_specific_info(MOVTrack *track,
...
@@ -5459,11 +5459,10 @@ static int mov_create_dvd_sub_decoder_specific_info(MOVTrack *track,
return
0
;
return
0
;
}
}
static
int
mov_
write_header
(
AVFormatContext
*
s
)
static
int
mov_
init
(
AVFormatContext
*
s
)
{
{
AVIOContext
*
pb
=
s
->
pb
;
MOVMuxContext
*
mov
=
s
->
priv_data
;
MOVMuxContext
*
mov
=
s
->
priv_data
;
AVDictionaryEntry
*
t
,
*
global_tcr
=
av_dict_get
(
s
->
metadata
,
"timecode"
,
NULL
,
0
);
AVDictionaryEntry
*
global_tcr
=
av_dict_get
(
s
->
metadata
,
"timecode"
,
NULL
,
0
);
int
i
,
ret
,
hint_track
=
0
,
tmcd_track
=
0
;
int
i
,
ret
,
hint_track
=
0
,
tmcd_track
=
0
;
mov
->
fc
=
s
;
mov
->
fc
=
s
;
...
@@ -5500,6 +5499,11 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5500,6 +5499,11 @@ static int mov_write_header(AVFormatContext *s)
mov
->
flags
|=
FF_MOV_FLAG_FRAGMENT
|
FF_MOV_FLAG_EMPTY_MOOV
|
mov
->
flags
|=
FF_MOV_FLAG_FRAGMENT
|
FF_MOV_FLAG_EMPTY_MOOV
|
FF_MOV_FLAG_DEFAULT_BASE_MOOF
;
FF_MOV_FLAG_DEFAULT_BASE_MOOF
;
if
(
mov
->
flags
&
FF_MOV_FLAG_EMPTY_MOOV
&&
s
->
flags
&
AVFMT_FLAG_AUTO_BSF
)
{
av_log
(
s
,
AV_LOG_VERBOSE
,
"Empty MOOV enabled; disabling automatic bitstream filtering
\n
"
);
s
->
flags
&=
~
AVFMT_FLAG_AUTO_BSF
;
}
if
(
mov
->
flags
&
FF_MOV_FLAG_FASTSTART
)
{
if
(
mov
->
flags
&
FF_MOV_FLAG_FASTSTART
)
{
mov
->
reserved_moov_size
=
-
1
;
mov
->
reserved_moov_size
=
-
1
;
}
}
...
@@ -5546,11 +5550,6 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5546,11 +5550,6 @@ static int mov_write_header(AVFormatContext *s)
return
AVERROR
(
EINVAL
);
return
AVERROR
(
EINVAL
);
}
}
if
(
!
(
mov
->
flags
&
FF_MOV_FLAG_DELAY_MOOV
))
{
if
((
ret
=
mov_write_identification
(
pb
,
s
))
<
0
)
return
ret
;
}
mov
->
nb_streams
=
s
->
nb_streams
;
mov
->
nb_streams
=
s
->
nb_streams
;
if
(
mov
->
mode
&
(
MODE_MP4
|
MODE_MOV
|
MODE_IPOD
)
&&
s
->
nb_chapters
)
if
(
mov
->
mode
&
(
MODE_MP4
|
MODE_MOV
|
MODE_IPOD
)
&&
s
->
nb_chapters
)
mov
->
chapter_track
=
mov
->
nb_streams
++
;
mov
->
chapter_track
=
mov
->
nb_streams
++
;
...
@@ -5574,7 +5573,7 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5574,7 +5573,7 @@ static int mov_write_header(AVFormatContext *s)
/* +1 tmcd track for each video stream with a timecode */
/* +1 tmcd track for each video stream with a timecode */
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
AVStream
*
st
=
s
->
streams
[
i
];
AVStream
*
st
=
s
->
streams
[
i
];
t
=
global_tcr
;
AVDictionaryEntry
*
t
=
global_tcr
;
if
(
st
->
codecpar
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
if
(
st
->
codecpar
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
(
t
||
(
t
=
av_dict_get
(
st
->
metadata
,
"timecode"
,
NULL
,
0
))))
{
(
t
||
(
t
=
av_dict_get
(
st
->
metadata
,
"timecode"
,
NULL
,
0
))))
{
AVTimecode
tc
;
AVTimecode
tc
;
...
@@ -5750,6 +5749,48 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5750,6 +5749,48 @@ static int mov_write_header(AVFormatContext *s)
avpriv_set_pts_info
(
st
,
64
,
1
,
track
->
timescale
);
avpriv_set_pts_info
(
st
,
64
,
1
,
track
->
timescale
);
if
(
mov
->
encryption_scheme
==
MOV_ENC_CENC_AES_CTR
)
{
ret
=
ff_mov_cenc_init
(
&
track
->
cenc
,
mov
->
encryption_key
,
track
->
par
->
codec_id
==
AV_CODEC_ID_H264
,
s
->
flags
&
AVFMT_FLAG_BITEXACT
);
if
(
ret
)
return
ret
;
}
}
enable_tracks
(
s
);
return
0
;
}
static
int
mov_write_header
(
AVFormatContext
*
s
)
{
AVIOContext
*
pb
=
s
->
pb
;
MOVMuxContext
*
mov
=
s
->
priv_data
;
AVDictionaryEntry
*
t
,
*
global_tcr
=
av_dict_get
(
s
->
metadata
,
"timecode"
,
NULL
,
0
);
int
i
,
ret
,
hint_track
=
0
,
tmcd_track
=
0
,
nb_tracks
=
s
->
nb_streams
;
if
(
mov
->
mode
&
(
MODE_MP4
|
MODE_MOV
|
MODE_IPOD
)
&&
s
->
nb_chapters
)
nb_tracks
++
;
if
(
mov
->
flags
&
FF_MOV_FLAG_RTP_HINT
)
{
/* Add hint tracks for each audio and video stream */
hint_track
=
nb_tracks
;
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
AVStream
*
st
=
s
->
streams
[
i
];
if
(
st
->
codecpar
->
codec_type
==
AVMEDIA_TYPE_VIDEO
||
st
->
codecpar
->
codec_type
==
AVMEDIA_TYPE_AUDIO
)
{
nb_tracks
++
;
}
}
}
if
(
mov
->
mode
==
MODE_MOV
||
mov
->
mode
==
MODE_MP4
)
tmcd_track
=
nb_tracks
;
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
int
j
;
AVStream
*
st
=
s
->
streams
[
i
];
MOVTrack
*
track
=
&
mov
->
tracks
[
i
];
/* copy extradata if it exists */
/* copy extradata if it exists */
if
(
st
->
codecpar
->
extradata_size
)
{
if
(
st
->
codecpar
->
extradata_size
)
{
if
(
st
->
codecpar
->
codec_id
==
AV_CODEC_ID_DVD_SUBTITLE
)
if
(
st
->
codecpar
->
codec_id
==
AV_CODEC_ID_DVD_SUBTITLE
)
...
@@ -5764,19 +5805,6 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5764,19 +5805,6 @@ static int mov_write_header(AVFormatContext *s)
}
}
}
}
if
(
mov
->
encryption_scheme
==
MOV_ENC_CENC_AES_CTR
)
{
ret
=
ff_mov_cenc_init
(
&
track
->
cenc
,
mov
->
encryption_key
,
track
->
par
->
codec_id
==
AV_CODEC_ID_H264
,
s
->
flags
&
AVFMT_FLAG_BITEXACT
);
if
(
ret
)
return
ret
;
}
}
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
int
j
;
AVStream
*
st
=
s
->
streams
[
i
];
MOVTrack
*
track
=
&
mov
->
tracks
[
i
];
if
(
st
->
codecpar
->
codec_type
!=
AVMEDIA_TYPE_AUDIO
||
if
(
st
->
codecpar
->
codec_type
!=
AVMEDIA_TYPE_AUDIO
||
track
->
par
->
channel_layout
!=
AV_CH_LAYOUT_MONO
)
track
->
par
->
channel_layout
!=
AV_CH_LAYOUT_MONO
)
continue
;
continue
;
...
@@ -5797,8 +5825,10 @@ static int mov_write_header(AVFormatContext *s)
...
@@ -5797,8 +5825,10 @@ static int mov_write_header(AVFormatContext *s)
}
}
}
}
enable_tracks
(
s
);
if
(
!
(
mov
->
flags
&
FF_MOV_FLAG_DELAY_MOOV
))
{
if
((
ret
=
mov_write_identification
(
pb
,
s
))
<
0
)
return
ret
;
}
if
(
mov
->
reserved_moov_size
){
if
(
mov
->
reserved_moov_size
){
mov
->
reserved_header_pos
=
avio_tell
(
pb
);
mov
->
reserved_header_pos
=
avio_tell
(
pb
);
...
@@ -6130,6 +6160,19 @@ static int mov_write_trailer(AVFormatContext *s)
...
@@ -6130,6 +6160,19 @@ static int mov_write_trailer(AVFormatContext *s)
return
res
;
return
res
;
}
}
static
int
mov_check_bitstream
(
struct
AVFormatContext
*
s
,
const
AVPacket
*
pkt
)
{
int
ret
=
1
;
AVStream
*
st
=
s
->
streams
[
pkt
->
stream_index
];
if
(
st
->
codecpar
->
codec_id
==
AV_CODEC_ID_AAC
)
{
if
(
pkt
->
size
>
2
&&
(
AV_RB16
(
pkt
->
data
)
&
0xfff0
)
==
0xfff0
)
ret
=
ff_stream_add_bitstream_filter
(
st
,
"aac_adtstoasc"
,
NULL
);
}
return
ret
;
}
#if CONFIG_MOV_MUXER
#if CONFIG_MOV_MUXER
MOV_CLASS
(
mov
)
MOV_CLASS
(
mov
)
AVOutputFormat
ff_mov_muxer
=
{
AVOutputFormat
ff_mov_muxer
=
{
...
@@ -6140,6 +6183,7 @@ AVOutputFormat ff_mov_muxer = {
...
@@ -6140,6 +6183,7 @@ AVOutputFormat ff_mov_muxer = {
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
...
@@ -6148,6 +6192,7 @@ AVOutputFormat ff_mov_muxer = {
...
@@ -6148,6 +6192,7 @@ AVOutputFormat ff_mov_muxer = {
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_codec_movvideo_tags
,
ff_codec_movaudio_tags
,
0
ff_codec_movvideo_tags
,
ff_codec_movaudio_tags
,
0
},
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
mov_muxer_class
,
.
priv_class
=
&
mov_muxer_class
,
};
};
#endif
#endif
...
@@ -6160,12 +6205,14 @@ AVOutputFormat ff_tgp_muxer = {
...
@@ -6160,12 +6205,14 @@ AVOutputFormat ff_tgp_muxer = {
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
audio_codec
=
AV_CODEC_ID_AMR_NB
,
.
audio_codec
=
AV_CODEC_ID_AMR_NB
,
.
video_codec
=
AV_CODEC_ID_H263
,
.
video_codec
=
AV_CODEC_ID_H263
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_3gp_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_3gp_tags
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
tgp_muxer_class
,
.
priv_class
=
&
tgp_muxer_class
,
};
};
#endif
#endif
...
@@ -6180,12 +6227,14 @@ AVOutputFormat ff_mp4_muxer = {
...
@@ -6180,12 +6227,14 @@ AVOutputFormat ff_mp4_muxer = {
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
mp4_muxer_class
,
.
priv_class
=
&
mp4_muxer_class
,
};
};
#endif
#endif
...
@@ -6199,12 +6248,14 @@ AVOutputFormat ff_psp_muxer = {
...
@@ -6199,12 +6248,14 @@ AVOutputFormat ff_psp_muxer = {
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
.
video_codec
=
CONFIG_LIBX264_ENCODER
?
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
AV_CODEC_ID_H264
:
AV_CODEC_ID_MPEG4
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
psp_muxer_class
,
.
priv_class
=
&
psp_muxer_class
,
};
};
#endif
#endif
...
@@ -6217,12 +6268,14 @@ AVOutputFormat ff_tg2_muxer = {
...
@@ -6217,12 +6268,14 @@ AVOutputFormat ff_tg2_muxer = {
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
audio_codec
=
AV_CODEC_ID_AMR_NB
,
.
audio_codec
=
AV_CODEC_ID_AMR_NB
,
.
video_codec
=
AV_CODEC_ID_H263
,
.
video_codec
=
AV_CODEC_ID_H263
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_3gp_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_3gp_tags
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
tg2_muxer_class
,
.
priv_class
=
&
tg2_muxer_class
,
};
};
#endif
#endif
...
@@ -6236,12 +6289,14 @@ AVOutputFormat ff_ipod_muxer = {
...
@@ -6236,12 +6289,14 @@ AVOutputFormat ff_ipod_muxer = {
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_ipod_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_ipod_tags
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
ipod_muxer_class
,
.
priv_class
=
&
ipod_muxer_class
,
};
};
#endif
#endif
...
@@ -6255,12 +6310,14 @@ AVOutputFormat ff_ismv_muxer = {
...
@@ -6255,12 +6310,14 @@ AVOutputFormat ff_ismv_muxer = {
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
|
AVFMT_TS_NEGATIVE
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_mp4_obj_type
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
ismv_muxer_class
,
.
priv_class
=
&
ismv_muxer_class
,
};
};
#endif
#endif
...
@@ -6274,12 +6331,14 @@ AVOutputFormat ff_f4v_muxer = {
...
@@ -6274,12 +6331,14 @@ AVOutputFormat ff_f4v_muxer = {
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
priv_data_size
=
sizeof
(
MOVMuxContext
),
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
audio_codec
=
AV_CODEC_ID_AAC
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
video_codec
=
AV_CODEC_ID_H264
,
.
init
=
mov_init
,
.
write_header
=
mov_write_header
,
.
write_header
=
mov_write_header
,
.
write_packet
=
mov_write_packet
,
.
write_packet
=
mov_write_packet
,
.
write_trailer
=
mov_write_trailer
,
.
write_trailer
=
mov_write_trailer
,
.
deinit
=
mov_free
,
.
deinit
=
mov_free
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_ALLOW_FLUSH
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_f4v_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
codec_f4v_tags
,
0
},
.
check_bitstream
=
mov_check_bitstream
,
.
priv_class
=
&
f4v_muxer_class
,
.
priv_class
=
&
f4v_muxer_class
,
};
};
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment