Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
634a44db
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,发现更多精彩内容 >>
提交
634a44db
编写于
6月 19, 2020
作者:
J
James Almer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avcodec/av1_parser: set context values outside the OBU parsing loop
Signed-off-by:
N
James Almer
<
jamrial@gmail.com
>
上级
2f599467
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
29 deletion
+32
-29
libavcodec/av1_parser.c
libavcodec/av1_parser.c
+32
-29
未找到文件。
libavcodec/av1_parser.c
浏览文件 @
634a44db
...
@@ -53,6 +53,8 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
...
@@ -53,6 +53,8 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
AV1ParseContext
*
s
=
ctx
->
priv_data
;
AV1ParseContext
*
s
=
ctx
->
priv_data
;
CodedBitstreamFragment
*
td
=
&
s
->
temporal_unit
;
CodedBitstreamFragment
*
td
=
&
s
->
temporal_unit
;
CodedBitstreamAV1Context
*
av1
=
s
->
cbc
->
priv_data
;
CodedBitstreamAV1Context
*
av1
=
s
->
cbc
->
priv_data
;
AV1RawSequenceHeader
*
seq
;
AV1RawColorConfig
*
color
;
int
ret
;
int
ret
;
*
out_data
=
data
;
*
out_data
=
data
;
...
@@ -86,11 +88,12 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
...
@@ -86,11 +88,12 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
goto
end
;
goto
end
;
}
}
seq
=
av1
->
sequence_header
;
color
=
&
seq
->
color_config
;
for
(
int
i
=
0
;
i
<
td
->
nb_units
;
i
++
)
{
for
(
int
i
=
0
;
i
<
td
->
nb_units
;
i
++
)
{
CodedBitstreamUnit
*
unit
=
&
td
->
units
[
i
];
CodedBitstreamUnit
*
unit
=
&
td
->
units
[
i
];
AV1RawOBU
*
obu
=
unit
->
content
;
AV1RawOBU
*
obu
=
unit
->
content
;
AV1RawSequenceHeader
*
seq
=
av1
->
sequence_header
;
AV1RawColorConfig
*
color
=
&
seq
->
color_config
;
AV1RawFrameHeader
*
frame
;
AV1RawFrameHeader
*
frame
;
int
frame_type
;
int
frame_type
;
...
@@ -127,9 +130,6 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
...
@@ -127,9 +130,6 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
ctx
->
key_frame
=
frame_type
==
AV1_FRAME_KEY
;
ctx
->
key_frame
=
frame_type
==
AV1_FRAME_KEY
;
}
}
avctx
->
profile
=
seq
->
seq_profile
;
avctx
->
level
=
seq
->
seq_level_idx
[
0
];
switch
(
frame_type
)
{
switch
(
frame_type
)
{
case
AV1_FRAME_KEY
:
case
AV1_FRAME_KEY
:
case
AV1_FRAME_INTRA_ONLY
:
case
AV1_FRAME_INTRA_ONLY
:
...
@@ -143,33 +143,36 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
...
@@ -143,33 +143,36 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
break
;
break
;
}
}
ctx
->
picture_structure
=
AV_PICTURE_STRUCTURE_FRAME
;
ctx
->
picture_structure
=
AV_PICTURE_STRUCTURE_FRAME
;
}
switch
(
av1
->
bit_depth
)
{
switch
(
av1
->
bit_depth
)
{
case
8
:
case
8
:
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY8
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY8
:
pix_fmts_8bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
:
pix_fmts_8bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
break
;
break
;
case
10
:
case
10
:
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY10
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY10
:
pix_fmts_10bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
:
pix_fmts_10bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
break
;
break
;
case
12
:
case
12
:
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY12
ctx
->
format
=
color
->
mono_chrome
?
AV_PIX_FMT_GRAY12
:
pix_fmts_12bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
:
pix_fmts_12bit
[
color
->
subsampling_x
][
color
->
subsampling_y
];
break
;
break
;
}
}
av_assert2
(
ctx
->
format
!=
AV_PIX_FMT_NONE
);
av_assert2
(
ctx
->
format
!=
AV_PIX_FMT_NONE
);
avctx
->
colorspace
=
(
enum
AVColorSpace
)
color
->
matrix_coefficients
;
avctx
->
profile
=
seq
->
seq_profile
;
avctx
->
color_primaries
=
(
enum
AVColorPrimaries
)
color
->
color_primaries
;
avctx
->
level
=
seq
->
seq_level_idx
[
0
];
avctx
->
color_trc
=
(
enum
AVColorTransferCharacteristic
)
color
->
transfer_characteristics
;
avctx
->
color_range
=
color
->
color_range
?
AVCOL_RANGE_JPEG
:
AVCOL_RANGE_MPEG
;
if
(
ctx
->
width
!=
avctx
->
width
||
ctx
->
height
!=
avctx
->
height
)
{
avctx
->
colorspace
=
(
enum
AVColorSpace
)
color
->
matrix_coefficients
;
ret
=
ff_set_dimensions
(
avctx
,
ctx
->
width
,
ctx
->
height
);
avctx
->
color_primaries
=
(
enum
AVColorPrimaries
)
color
->
color_primaries
;
if
(
ret
<
0
)
avctx
->
color_trc
=
(
enum
AVColorTransferCharacteristic
)
color
->
transfer_characteristics
;
goto
end
;
avctx
->
color_range
=
color
->
color_range
?
AVCOL_RANGE_JPEG
:
AVCOL_RANGE_MPEG
;
}
if
(
ctx
->
width
!=
avctx
->
width
||
ctx
->
height
!=
avctx
->
height
)
{
ret
=
ff_set_dimensions
(
avctx
,
ctx
->
width
,
ctx
->
height
);
if
(
ret
<
0
)
goto
end
;
}
}
if
(
avctx
->
framerate
.
num
)
if
(
avctx
->
framerate
.
num
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录