Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
45f86128
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
45f86128
编写于
8月 17, 2011
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avconv: reindent.
上级
ea065176
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
109 addition
and
109 deletion
+109
-109
avconv.c
avconv.c
+109
-109
未找到文件。
avconv.c
浏览文件 @
45f86128
...
@@ -1579,137 +1579,137 @@ static int output_packet(InputStream *ist, int ist_index,
...
@@ -1579,137 +1579,137 @@ static int output_packet(InputStream *ist, int ist_index,
/* if output time reached then transcode raw format,
/* if output time reached then transcode raw format,
encode packets and output them */
encode packets and output them */
for
(
i
=
0
;
i
<
nb_ostreams
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_ostreams
;
i
++
)
{
OutputFile
*
of
=
&
output_files
[
ost_table
[
i
].
file_index
];
OutputFile
*
of
=
&
output_files
[
ost_table
[
i
].
file_index
];
int
frame_size
;
int
frame_size
;
ost
=
&
ost_table
[
i
];
ost
=
&
ost_table
[
i
];
if
(
ost
->
source_index
!=
ist_index
)
if
(
ost
->
source_index
!=
ist_index
)
continue
;
continue
;
if
(
of
->
start_time
&&
ist
->
pts
<
of
->
start_time
)
if
(
of
->
start_time
&&
ist
->
pts
<
of
->
start_time
)
continue
;
continue
;
if
(
of
->
recording_time
!=
INT64_MAX
&&
if
(
of
->
recording_time
!=
INT64_MAX
&&
av_compare_ts
(
ist
->
pts
,
AV_TIME_BASE_Q
,
of
->
recording_time
+
of
->
start_time
,
av_compare_ts
(
ist
->
pts
,
AV_TIME_BASE_Q
,
of
->
recording_time
+
of
->
start_time
,
(
AVRational
){
1
,
1000000
})
>=
0
)
{
(
AVRational
){
1
,
1000000
})
>=
0
)
{
ost
->
is_past_recording_time
=
1
;
ost
->
is_past_recording_time
=
1
;
continue
;
continue
;
}
}
#if CONFIG_AVFILTER
#if CONFIG_AVFILTER
if
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
if
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
ost
->
input_video_filter
)
{
ost
->
input_video_filter
)
{
AVRational
sar
;
AVRational
sar
;
if
(
ist
->
st
->
sample_aspect_ratio
.
num
)
if
(
ist
->
st
->
sample_aspect_ratio
.
num
)
sar
=
ist
->
st
->
sample_aspect_ratio
;
sar
=
ist
->
st
->
sample_aspect_ratio
;
else
else
sar
=
ist
->
st
->
codec
->
sample_aspect_ratio
;
sar
=
ist
->
st
->
codec
->
sample_aspect_ratio
;
av_vsrc_buffer_add_frame
(
ost
->
input_video_filter
,
&
picture
,
ist
->
pts
,
sar
);
av_vsrc_buffer_add_frame
(
ost
->
input_video_filter
,
&
picture
,
ist
->
pts
,
sar
);
}
}
frame_available
=
ist
->
st
->
codec
->
codec_type
!=
AVMEDIA_TYPE_VIDEO
||
frame_available
=
ist
->
st
->
codec
->
codec_type
!=
AVMEDIA_TYPE_VIDEO
||
!
ost
->
output_video_filter
||
avfilter_poll_frame
(
ost
->
output_video_filter
->
inputs
[
0
]);
!
ost
->
output_video_filter
||
avfilter_poll_frame
(
ost
->
output_video_filter
->
inputs
[
0
]);
while
(
frame_available
)
{
while
(
frame_available
)
{
AVRational
ist_pts_tb
;
AVRational
ist_pts_tb
;
if
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
ost
->
output_video_filter
)
if
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
ost
->
output_video_filter
)
get_filtered_video_frame
(
ost
->
output_video_filter
,
&
picture
,
&
ost
->
picref
,
&
ist_pts_tb
);
get_filtered_video_frame
(
ost
->
output_video_filter
,
&
picture
,
&
ost
->
picref
,
&
ist_pts_tb
);
if
(
ost
->
picref
)
if
(
ost
->
picref
)
ist
->
pts
=
av_rescale_q
(
ost
->
picref
->
pts
,
ist_pts_tb
,
AV_TIME_BASE_Q
);
ist
->
pts
=
av_rescale_q
(
ost
->
picref
->
pts
,
ist_pts_tb
,
AV_TIME_BASE_Q
);
#endif
#endif
os
=
output_files
[
ost
->
file_index
].
ctx
;
os
=
output_files
[
ost
->
file_index
].
ctx
;
/* set the input output pts pairs */
/* set the input output pts pairs */
//ost->sync_ipts = (double)(ist->pts + input_files[ist->file_index].ts_offset - start_time)/ AV_TIME_BASE;
//ost->sync_ipts = (double)(ist->pts + input_files[ist->file_index].ts_offset - start_time)/ AV_TIME_BASE;
if
(
ost
->
encoding_needed
)
{
if
(
ost
->
encoding_needed
)
{
av_assert0
(
ist
->
decoding_needed
);
av_assert0
(
ist
->
decoding_needed
);
switch
(
ost
->
st
->
codec
->
codec_type
)
{
switch
(
ost
->
st
->
codec
->
codec_type
)
{
case
AVMEDIA_TYPE_AUDIO
:
case
AVMEDIA_TYPE_AUDIO
:
do_audio_out
(
os
,
ost
,
ist
,
decoded_data_buf
,
decoded_data_size
);
do_audio_out
(
os
,
ost
,
ist
,
decoded_data_buf
,
decoded_data_size
);
break
;
break
;
case
AVMEDIA_TYPE_VIDEO
:
case
AVMEDIA_TYPE_VIDEO
:
#if CONFIG_AVFILTER
#if CONFIG_AVFILTER
if
(
ost
->
picref
->
video
&&
!
ost
->
frame_aspect_ratio
)
if
(
ost
->
picref
->
video
&&
!
ost
->
frame_aspect_ratio
)
ost
->
st
->
codec
->
sample_aspect_ratio
=
ost
->
picref
->
video
->
pixel_aspect
;
ost
->
st
->
codec
->
sample_aspect_ratio
=
ost
->
picref
->
video
->
pixel_aspect
;
#endif
#endif
do_video_out
(
os
,
ost
,
ist
,
&
picture
,
&
frame_size
,
do_video_out
(
os
,
ost
,
ist
,
&
picture
,
&
frame_size
,
same_quant
?
quality
:
ost
->
st
->
codec
->
global_quality
);
same_quant
?
quality
:
ost
->
st
->
codec
->
global_quality
);
if
(
vstats_filename
&&
frame_size
)
if
(
vstats_filename
&&
frame_size
)
do_video_stats
(
os
,
ost
,
frame_size
);
do_video_stats
(
os
,
ost
,
frame_size
);
break
;
break
;
case
AVMEDIA_TYPE_SUBTITLE
:
case
AVMEDIA_TYPE_SUBTITLE
:
do_subtitle_out
(
os
,
ost
,
ist
,
&
subtitle
,
do_subtitle_out
(
os
,
ost
,
ist
,
&
subtitle
,
pkt
->
pts
);
pkt
->
pts
);
break
;
break
;
default:
default:
abort
();
abort
();
}
}
}
else
{
}
else
{
AVFrame
avframe
;
//FIXME/XXX remove this
AVFrame
avframe
;
//FIXME/XXX remove this
AVPacket
opkt
;
AVPacket
opkt
;
int64_t
ost_tb_start_time
=
av_rescale_q
(
of
->
start_time
,
AV_TIME_BASE_Q
,
ost
->
st
->
time_base
);
int64_t
ost_tb_start_time
=
av_rescale_q
(
of
->
start_time
,
AV_TIME_BASE_Q
,
ost
->
st
->
time_base
);
av_init_packet
(
&
opkt
);
av_init_packet
(
&
opkt
);
if
((
!
ost
->
frame_number
&&
!
(
pkt
->
flags
&
AV_PKT_FLAG_KEY
))
&&
!
copy_initial_nonkeyframes
)
if
((
!
ost
->
frame_number
&&
!
(
pkt
->
flags
&
AV_PKT_FLAG_KEY
))
&&
!
copy_initial_nonkeyframes
)
#if !CONFIG_AVFILTER
#if !CONFIG_AVFILTER
continue
;
continue
;
#else
#else
goto
cont
;
goto
cont
;
#endif
#endif
/* no reencoding needed : output the packet directly */
/* no reencoding needed : output the packet directly */
/* force the input stream PTS */
/* force the input stream PTS */
avcodec_get_frame_defaults
(
&
avframe
);
avcodec_get_frame_defaults
(
&
avframe
);
ost
->
st
->
codec
->
coded_frame
=
&
avframe
;
ost
->
st
->
codec
->
coded_frame
=
&
avframe
;
avframe
.
key_frame
=
pkt
->
flags
&
AV_PKT_FLAG_KEY
;
avframe
.
key_frame
=
pkt
->
flags
&
AV_PKT_FLAG_KEY
;
if
(
ost
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_AUDIO
)
if
(
ost
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_AUDIO
)
audio_size
+=
data_size
;
audio_size
+=
data_size
;
else
if
(
ost
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
{
else
if
(
ost
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
{
video_size
+=
data_size
;
video_size
+=
data_size
;
ost
->
sync_opts
++
;
ost
->
sync_opts
++
;
}
}
opkt
.
stream_index
=
ost
->
index
;
opkt
.
stream_index
=
ost
->
index
;
if
(
pkt
->
pts
!=
AV_NOPTS_VALUE
)
if
(
pkt
->
pts
!=
AV_NOPTS_VALUE
)
opkt
.
pts
=
av_rescale_q
(
pkt
->
pts
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
)
-
ost_tb_start_time
;
opkt
.
pts
=
av_rescale_q
(
pkt
->
pts
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
)
-
ost_tb_start_time
;
else
else
opkt
.
pts
=
AV_NOPTS_VALUE
;
opkt
.
pts
=
AV_NOPTS_VALUE
;
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
opkt
.
dts
=
av_rescale_q
(
ist
->
pts
,
AV_TIME_BASE_Q
,
ost
->
st
->
time_base
);
else
opkt
.
dts
=
av_rescale_q
(
pkt
->
dts
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
);
opkt
.
dts
-=
ost_tb_start_time
;
opkt
.
duration
=
av_rescale_q
(
pkt
->
duration
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
);
opkt
.
flags
=
pkt
->
flags
;
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
if
(
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_H264
&&
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_MPEG1VIDEO
&&
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_MPEG2VIDEO
)
{
if
(
av_parser_change
(
ist
->
st
->
parser
,
ost
->
st
->
codec
,
&
opkt
.
data
,
&
opkt
.
size
,
data_buf
,
data_size
,
pkt
->
flags
&
AV_PKT_FLAG_KEY
))
opkt
.
destruct
=
av_destruct_packet
;
}
else
{
opkt
.
data
=
data_buf
;
opkt
.
size
=
data_size
;
}
write_frame
(
os
,
&
opkt
,
ost
->
st
->
codec
,
ost
->
bitstream_filters
);
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
ost
->
st
->
codec
->
frame_number
++
;
opkt
.
dts
=
av_rescale_q
(
ist
->
pts
,
AV_TIME_BASE_Q
,
ost
->
st
->
time_base
);
ost
->
frame_number
++
;
else
av_free_packet
(
&
opkt
);
opkt
.
dts
=
av_rescale_q
(
pkt
->
dts
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
);
opkt
.
dts
-=
ost_tb_start_time
;
opkt
.
duration
=
av_rescale_q
(
pkt
->
duration
,
ist
->
st
->
time_base
,
ost
->
st
->
time_base
);
opkt
.
flags
=
pkt
->
flags
;
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
if
(
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_H264
&&
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_MPEG1VIDEO
&&
ost
->
st
->
codec
->
codec_id
!=
CODEC_ID_MPEG2VIDEO
)
{
if
(
av_parser_change
(
ist
->
st
->
parser
,
ost
->
st
->
codec
,
&
opkt
.
data
,
&
opkt
.
size
,
data_buf
,
data_size
,
pkt
->
flags
&
AV_PKT_FLAG_KEY
))
opkt
.
destruct
=
av_destruct_packet
;
}
else
{
opkt
.
data
=
data_buf
;
opkt
.
size
=
data_size
;
}
}
#if CONFIG_AVFILTER
cont:
write_frame
(
os
,
&
opkt
,
ost
->
st
->
codec
,
ost
->
bitstream_filters
);
frame_available
=
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
&&
ost
->
st
->
codec
->
frame_number
++
;
ost
->
output_video_filter
&&
avfilter_poll_frame
(
ost
->
output_video_filter
->
inputs
[
0
]);
ost
->
frame_number
++
;
if
(
ost
->
picref
)
av_free_packet
(
&
opkt
);
avfilter_unref_buffer
(
ost
->
picref
);
}
}
#if CONFIG_AVFILTER
cont:
frame_available
=
(
ist
->
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
&&
ost
->
output_video_filter
&&
avfilter_poll_frame
(
ost
->
output_video_filter
->
inputs
[
0
]);
if
(
ost
->
picref
)
avfilter_unref_buffer
(
ost
->
picref
);
}
#endif
#endif
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录