Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
TrueDei
FFmpeg
提交
53f374c0
F
FFmpeg
项目概览
TrueDei
/
FFmpeg
通知
1
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,发现更多精彩内容 >>
提交
53f374c0
编写于
9月 03, 2021
作者:
A
Andreas Rheinhardt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
examples/remuxing: Don't use stack packet
Signed-off-by:
N
Andreas Rheinhardt
<
andreas.rheinhardt@outlook.com
>
上级
78426da3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
13 deletion
+20
-13
doc/examples/remuxing.c
doc/examples/remuxing.c
+20
-13
未找到文件。
doc/examples/remuxing.c
浏览文件 @
53f374c0
...
...
@@ -47,7 +47,7 @@ int main(int argc, char **argv)
{
const
AVOutputFormat
*
ofmt
=
NULL
;
AVFormatContext
*
ifmt_ctx
=
NULL
,
*
ofmt_ctx
=
NULL
;
AVPacket
pkt
;
AVPacket
*
pkt
=
NULL
;
const
char
*
in_filename
,
*
out_filename
;
int
ret
,
i
;
int
stream_index
=
0
;
...
...
@@ -65,6 +65,12 @@ int main(int argc, char **argv)
in_filename
=
argv
[
1
];
out_filename
=
argv
[
2
];
pkt
=
av_packet_alloc
();
if
(
!
pkt
)
{
fprintf
(
stderr
,
"Could not allocate AVPacket
\n
"
);
goto
end
;
}
if
((
ret
=
avformat_open_input
(
&
ifmt_ctx
,
in_filename
,
0
,
0
))
<
0
)
{
fprintf
(
stderr
,
"Could not open input file '%s'"
,
in_filename
);
goto
end
;
...
...
@@ -140,27 +146,27 @@ int main(int argc, char **argv)
while
(
1
)
{
AVStream
*
in_stream
,
*
out_stream
;
ret
=
av_read_frame
(
ifmt_ctx
,
&
pkt
);
ret
=
av_read_frame
(
ifmt_ctx
,
pkt
);
if
(
ret
<
0
)
break
;
in_stream
=
ifmt_ctx
->
streams
[
pkt
.
stream_index
];
if
(
pkt
.
stream_index
>=
stream_mapping_size
||
stream_mapping
[
pkt
.
stream_index
]
<
0
)
{
av_packet_unref
(
&
pkt
);
in_stream
=
ifmt_ctx
->
streams
[
pkt
->
stream_index
];
if
(
pkt
->
stream_index
>=
stream_mapping_size
||
stream_mapping
[
pkt
->
stream_index
]
<
0
)
{
av_packet_unref
(
pkt
);
continue
;
}
pkt
.
stream_index
=
stream_mapping
[
pkt
.
stream_index
];
out_stream
=
ofmt_ctx
->
streams
[
pkt
.
stream_index
];
log_packet
(
ifmt_ctx
,
&
pkt
,
"in"
);
pkt
->
stream_index
=
stream_mapping
[
pkt
->
stream_index
];
out_stream
=
ofmt_ctx
->
streams
[
pkt
->
stream_index
];
log_packet
(
ifmt_ctx
,
pkt
,
"in"
);
/* copy packet */
av_packet_rescale_ts
(
&
pkt
,
in_stream
->
time_base
,
out_stream
->
time_base
);
pkt
.
pos
=
-
1
;
log_packet
(
ofmt_ctx
,
&
pkt
,
"out"
);
av_packet_rescale_ts
(
pkt
,
in_stream
->
time_base
,
out_stream
->
time_base
);
pkt
->
pos
=
-
1
;
log_packet
(
ofmt_ctx
,
pkt
,
"out"
);
ret
=
av_interleaved_write_frame
(
ofmt_ctx
,
&
pkt
);
ret
=
av_interleaved_write_frame
(
ofmt_ctx
,
pkt
);
/* pkt is now blank (av_interleaved_write_frame() takes ownership of
* its contents and resets pkt), so that no unreferencing is necessary.
* This would be different if one used av_write_frame(). */
...
...
@@ -172,6 +178,7 @@ int main(int argc, char **argv)
av_write_trailer
(
ofmt_ctx
);
end:
av_packet_free
(
&
pkt
);
avformat_close_input
(
&
ifmt_ctx
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录