Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
d9b311d4
Commit
d9b311d4
authored
Dec 18, 2016
by
Nicolas George
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ffmpeg: use buffersink accessors.
parent
dbe9dbed
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
28 deletions
+30
-28
ffmpeg.c
ffmpeg.c
+24
-22
ffmpeg_filter.c
ffmpeg_filter.c
+6
-6
No files found.
ffmpeg.c
View file @
d9b311d4
...
...
@@ -1014,6 +1014,7 @@ static void do_video_out(OutputFile *of,
AVPacket
pkt
;
AVCodecContext
*
enc
=
ost
->
enc_ctx
;
AVCodecParameters
*
mux_par
=
ost
->
st
->
codecpar
;
AVRational
frame_rate
;
int
nb_frames
,
nb0_frames
,
i
;
double
delta
,
delta0
;
double
duration
=
0
;
...
...
@@ -1024,9 +1025,9 @@ static void do_video_out(OutputFile *of,
if
(
ost
->
source_index
>=
0
)
ist
=
input_streams
[
ost
->
source_index
];
if
(
filter
->
inputs
[
0
]
->
frame_rate
.
num
>
0
&&
filter
->
inputs
[
0
]
->
frame_rate
.
den
>
0
)
duration
=
1
/
(
av_q2d
(
f
ilter
->
inputs
[
0
]
->
f
rame_rate
)
*
av_q2d
(
enc
->
time_base
));
frame_rate
=
av_buffersink_get_frame_rate
(
filter
);
if
(
frame_rate
.
num
>
0
&&
frame_rate
.
den
>
0
)
duration
=
1
/
(
av_q2d
(
frame_rate
)
*
av_q2d
(
enc
->
time_base
));
if
(
ist
&&
ist
->
st
->
start_time
!=
AV_NOPTS_VALUE
&&
ist
->
st
->
first_dts
!=
AV_NOPTS_VALUE
&&
ost
->
frame_rate
.
num
)
duration
=
FFMIN
(
duration
,
1
/
(
av_q2d
(
ost
->
frame_rate
)
*
av_q2d
(
enc
->
time_base
)));
...
...
@@ -1416,7 +1417,7 @@ static int reap_filters(int flush)
av_log
(
NULL
,
AV_LOG_WARNING
,
"Error in av_buffersink_get_frame_flags(): %s
\n
"
,
av_err2str
(
ret
));
}
else
if
(
flush
&&
ret
==
AVERROR_EOF
)
{
if
(
filter
->
inputs
[
0
]
->
type
==
AVMEDIA_TYPE_VIDEO
)
if
(
av_buffersink_get_type
(
filter
)
==
AVMEDIA_TYPE_VIDEO
)
do_video_out
(
of
,
ost
,
NULL
,
AV_NOPTS_VALUE
);
}
break
;
...
...
@@ -1427,25 +1428,26 @@ static int reap_filters(int flush)
}
if
(
filtered_frame
->
pts
!=
AV_NOPTS_VALUE
)
{
int64_t
start_time
=
(
of
->
start_time
==
AV_NOPTS_VALUE
)
?
0
:
of
->
start_time
;
AVRational
filter_tb
=
av_buffersink_get_time_base
(
filter
);
AVRational
tb
=
enc
->
time_base
;
int
extra_bits
=
av_clip
(
29
-
av_log2
(
tb
.
den
),
0
,
16
);
tb
.
den
<<=
extra_bits
;
float_pts
=
av_rescale_q
(
filtered_frame
->
pts
,
filter
->
inputs
[
0
]
->
time_base
,
tb
)
-
av_rescale_q
(
filtered_frame
->
pts
,
filter
_tb
,
tb
)
-
av_rescale_q
(
start_time
,
AV_TIME_BASE_Q
,
tb
);
float_pts
/=
1
<<
extra_bits
;
// avoid exact midoints to reduce the chance of rounding differences, this can be removed in case the fps code is changed to work with integers
float_pts
+=
FFSIGN
(
float_pts
)
*
1
.
0
/
(
1
<<
17
);
filtered_frame
->
pts
=
av_rescale_q
(
filtered_frame
->
pts
,
filter
->
inputs
[
0
]
->
time_base
,
enc
->
time_base
)
-
av_rescale_q
(
filtered_frame
->
pts
,
filter
_tb
,
enc
->
time_base
)
-
av_rescale_q
(
start_time
,
AV_TIME_BASE_Q
,
enc
->
time_base
);
}
//if (ost->source_index >= 0)
// *filtered_frame= *input_streams[ost->source_index]->decoded_frame; //for me_threshold
switch
(
filter
->
inputs
[
0
]
->
type
)
{
switch
(
av_buffersink_get_type
(
filter
)
)
{
case
AVMEDIA_TYPE_VIDEO
:
if
(
!
ost
->
frame_aspect_ratio
.
num
)
enc
->
sample_aspect_ratio
=
filtered_frame
->
sample_aspect_ratio
;
...
...
@@ -3142,19 +3144,19 @@ static int init_output_stream_encode(OutputStream *ost)
switch
(
enc_ctx
->
codec_type
)
{
case
AVMEDIA_TYPE_AUDIO
:
enc_ctx
->
sample_fmt
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
;
enc_ctx
->
sample_fmt
=
av_buffersink_get_format
(
ost
->
filter
->
filter
)
;
if
(
dec_ctx
)
enc_ctx
->
bits_per_raw_sample
=
FFMIN
(
dec_ctx
->
bits_per_raw_sample
,
av_get_bytes_per_sample
(
enc_ctx
->
sample_fmt
)
<<
3
);
enc_ctx
->
sample_rate
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
sample_rate
;
enc_ctx
->
channel_layout
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
channel_layout
;
enc_ctx
->
channels
=
av
filter_link_get_channels
(
ost
->
filter
->
filter
->
inputs
[
0
]
);
enc_ctx
->
sample_rate
=
av_buffersink_get_sample_rate
(
ost
->
filter
->
filter
)
;
enc_ctx
->
channel_layout
=
av_buffersink_get_channel_layout
(
ost
->
filter
->
filter
)
;
enc_ctx
->
channels
=
av
_buffersink_get_channels
(
ost
->
filter
->
filter
);
enc_ctx
->
time_base
=
(
AVRational
){
1
,
enc_ctx
->
sample_rate
};
break
;
case
AVMEDIA_TYPE_VIDEO
:
enc_ctx
->
time_base
=
av_inv_q
(
ost
->
frame_rate
);
if
(
!
(
enc_ctx
->
time_base
.
num
&&
enc_ctx
->
time_base
.
den
))
enc_ctx
->
time_base
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
time_base
;
enc_ctx
->
time_base
=
av_buffersink_get_time_base
(
ost
->
filter
->
filter
)
;
if
(
av_q2d
(
enc_ctx
->
time_base
)
<
0
.
001
&&
video_sync_method
!=
VSYNC_PASSTHROUGH
&&
(
video_sync_method
==
VSYNC_CFR
||
video_sync_method
==
VSYNC_VSCFR
||
(
video_sync_method
==
VSYNC_AUTO
&&
!
(
oc
->
oformat
->
flags
&
AVFMT_VARIABLE_FPS
)))){
av_log
(
oc
,
AV_LOG_WARNING
,
"Frame rate very high for a muxer not efficiently supporting it.
\n
"
...
...
@@ -3165,27 +3167,27 @@ static int init_output_stream_encode(OutputStream *ost)
AV_TIME_BASE_Q
,
enc_ctx
->
time_base
);
enc_ctx
->
width
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
w
;
enc_ctx
->
height
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
h
;
enc_ctx
->
width
=
av_buffersink_get_w
(
ost
->
filter
->
filter
)
;
enc_ctx
->
height
=
av_buffersink_get_h
(
ost
->
filter
->
filter
)
;
enc_ctx
->
sample_aspect_ratio
=
ost
->
st
->
sample_aspect_ratio
=
ost
->
frame_aspect_ratio
.
num
?
// overridden by the -aspect cli option
av_mul_q
(
ost
->
frame_aspect_ratio
,
(
AVRational
){
enc_ctx
->
height
,
enc_ctx
->
width
})
:
ost
->
filter
->
filter
->
inputs
[
0
]
->
sample_aspect_ratio
;
av_buffersink_get_sample_aspect_ratio
(
ost
->
filter
->
filter
)
;
if
(
!
strncmp
(
ost
->
enc
->
name
,
"libx264"
,
7
)
&&
enc_ctx
->
pix_fmt
==
AV_PIX_FMT_NONE
&&
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
!=
AV_PIX_FMT_YUV420P
)
av_buffersink_get_format
(
ost
->
filter
->
filter
)
!=
AV_PIX_FMT_YUV420P
)
av_log
(
NULL
,
AV_LOG_WARNING
,
"No pixel format specified, %s for H.264 encoding chosen.
\n
"
"Use -pix_fmt yuv420p for compatibility with outdated media players.
\n
"
,
av_get_pix_fmt_name
(
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
));
av_get_pix_fmt_name
(
av_buffersink_get_format
(
ost
->
filter
->
filter
)
));
if
(
!
strncmp
(
ost
->
enc
->
name
,
"mpeg2video"
,
10
)
&&
enc_ctx
->
pix_fmt
==
AV_PIX_FMT_NONE
&&
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
!=
AV_PIX_FMT_YUV420P
)
av_buffersink_get_format
(
ost
->
filter
->
filter
)
!=
AV_PIX_FMT_YUV420P
)
av_log
(
NULL
,
AV_LOG_WARNING
,
"No pixel format specified, %s for MPEG-2 encoding chosen.
\n
"
"Use -pix_fmt yuv420p for compatibility with outdated media players.
\n
"
,
av_get_pix_fmt_name
(
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
));
enc_ctx
->
pix_fmt
=
ost
->
filter
->
filter
->
inputs
[
0
]
->
format
;
av_get_pix_fmt_name
(
av_buffersink_get_format
(
ost
->
filter
->
filter
)
));
enc_ctx
->
pix_fmt
=
av_buffersink_get_format
(
ost
->
filter
->
filter
)
;
if
(
dec_ctx
)
enc_ctx
->
bits_per_raw_sample
=
FFMIN
(
dec_ctx
->
bits_per_raw_sample
,
av_pix_fmt_desc_get
(
enc_ctx
->
pix_fmt
)
->
comp
[
0
].
depth
);
...
...
@@ -3268,8 +3270,8 @@ static int init_output_stream(OutputStream *ost, char *error, int error_len)
!
av_dict_get
(
ost
->
encoder_opts
,
"ab"
,
NULL
,
0
))
av_dict_set
(
&
ost
->
encoder_opts
,
"b"
,
"128000"
,
0
);
if
(
ost
->
filter
&&
ost
->
filter
->
filter
->
inputs
[
0
]
->
hw_frames_ctx
)
{
ost
->
enc_ctx
->
hw_frames_ctx
=
av_buffer_ref
(
ost
->
filter
->
filter
->
inputs
[
0
]
->
hw_frames_ctx
);
if
(
ost
->
filter
&&
av_buffersink_get_hw_frames_ctx
(
ost
->
filter
->
filter
)
)
{
ost
->
enc_ctx
->
hw_frames_ctx
=
av_buffer_ref
(
av_buffersink_get_hw_frames_ctx
(
ost
->
filter
->
filter
)
);
if
(
!
ost
->
enc_ctx
->
hw_frames_ctx
)
return
AVERROR
(
ENOMEM
);
}
...
...
ffmpeg_filter.c
View file @
d9b311d4
...
...
@@ -1079,15 +1079,15 @@ int configure_filtergraph(FilterGraph *fg)
* make sure they stay the same if the filtergraph is reconfigured later */
for
(
i
=
0
;
i
<
fg
->
nb_outputs
;
i
++
)
{
OutputFilter
*
ofilter
=
fg
->
outputs
[
i
];
AVFilter
Link
*
link
=
ofilter
->
filter
->
inputs
[
0
]
;
AVFilter
Context
*
sink
=
ofilter
->
filter
;
ofilter
->
format
=
link
->
format
;
ofilter
->
format
=
av_buffersink_get_format
(
sink
)
;
ofilter
->
width
=
link
->
w
;
ofilter
->
height
=
link
->
h
;
ofilter
->
width
=
av_buffersink_get_w
(
sink
)
;
ofilter
->
height
=
av_buffersink_get_h
(
sink
)
;
ofilter
->
sample_rate
=
link
->
sample_rate
;
ofilter
->
channel_layout
=
link
->
channel_layout
;
ofilter
->
sample_rate
=
av_buffersink_get_sample_rate
(
sink
)
;
ofilter
->
channel_layout
=
av_buffersink_get_channel_layout
(
sink
)
;
}
fg
->
reconfiguration
=
1
;
...
...
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