Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Obs Studio
提交
86147d97
O
Obs Studio
项目概览
小白菜888
/
Obs Studio
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Obs Studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
86147d97
编写于
9月 07, 2020
作者:
J
Jim
提交者:
GitHub
9月 07, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3415 from jpark37/default-color-space
Unify color space settings as 709
上级
2ac1ad52
b3dcb2a0
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
86 addition
and
61 deletion
+86
-61
UI/window-basic-main.cpp
UI/window-basic-main.cpp
+1
-1
deps/media-playback/media-playback/media.c
deps/media-playback/media-playback/media.c
+9
-3
docs/sphinx/reference-libobs-media-io.rst
docs/sphinx/reference-libobs-media-io.rst
+2
-1
docs/sphinx/reference-outputs.rst
docs/sphinx/reference-outputs.rst
+1
-0
libobs/media-io/video-io.h
libobs/media-io/video-io.h
+2
-2
libobs/media-io/video-matrices.c
libobs/media-io/video-matrices.c
+1
-3
libobs/media-io/video-scaler-ffmpeg.c
libobs/media-io/video-scaler-ffmpeg.c
+3
-9
plugins/decklink/decklink-device-instance.cpp
plugins/decklink/decklink-device-instance.cpp
+1
-1
plugins/enc-amf
plugins/enc-amf
+1
-1
plugins/mac-avcapture/av-capture.mm
plugins/mac-avcapture/av-capture.mm
+3
-3
plugins/obs-ffmpeg/jim-nvenc.c
plugins/obs-ffmpeg/jim-nvenc.c
+1
-1
plugins/obs-ffmpeg/obs-ffmpeg-mux.c
plugins/obs-ffmpeg/obs-ffmpeg-mux.c
+1
-1
plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
+1
-1
plugins/obs-ffmpeg/obs-ffmpeg-output.c
plugins/obs-ffmpeg/obs-ffmpeg-output.c
+4
-13
plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c
plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c
+19
-3
plugins/obs-x264/obs-x264.c
plugins/obs-x264/obs-x264.c
+1
-1
plugins/win-dshow/ffmpeg-decode.c
plugins/win-dshow/ffmpeg-decode.c
+31
-13
plugins/win-dshow/win-dshow.cpp
plugins/win-dshow/win-dshow.cpp
+4
-4
未找到文件。
UI/window-basic-main.cpp
浏览文件 @
86147d97
...
...
@@ -1392,7 +1392,7 @@ bool OBSBasic::InitBasicConfigDefaults()
config_set_default_uint
(
basicConfig
,
"Video"
,
"FPSDen"
,
1
);
config_set_default_string
(
basicConfig
,
"Video"
,
"ScaleType"
,
"bicubic"
);
config_set_default_string
(
basicConfig
,
"Video"
,
"ColorFormat"
,
"NV12"
);
config_set_default_string
(
basicConfig
,
"Video"
,
"ColorSpace"
,
"
sRGB
"
);
config_set_default_string
(
basicConfig
,
"Video"
,
"ColorSpace"
,
"
709
"
);
config_set_default_string
(
basicConfig
,
"Video"
,
"ColorRange"
,
"Partial"
);
...
...
deps/media-playback/media-playback/media.c
浏览文件 @
86147d97
...
...
@@ -112,12 +112,18 @@ static inline enum speaker_layout convert_speaker_layout(uint8_t channels)
static
inline
enum
video_colorspace
convert_color_space
(
enum
AVColorSpace
s
,
enum
AVColorTransferCharacteristic
trc
)
{
if
(
s
==
AVCOL_SPC_BT709
)
{
switch
(
s
)
{
case
AVCOL_SPC_BT709
:
return
(
trc
==
AVCOL_TRC_IEC61966_2_1
)
?
VIDEO_CS_SRGB
:
VIDEO_CS_709
;
case
AVCOL_SPC_FCC
:
case
AVCOL_SPC_BT470BG
:
case
AVCOL_SPC_SMPTE170M
:
case
AVCOL_SPC_SMPTE240M
:
return
VIDEO_CS_601
;
default:
return
VIDEO_CS_DEFAULT
;
}
return
VIDEO_CS_DEFAULT
;
}
static
inline
enum
video_range_type
convert_color_range
(
enum
AVColorRange
r
)
...
...
docs/sphinx/reference-libobs-media-io.rst
浏览文件 @
86147d97
...
...
@@ -39,9 +39,10 @@ Video Handler
YUV color space. Can be one of the following values:
- VIDEO_CS_DEFAULT - Equivalent to VIDEO_CS_
601
- VIDEO_CS_DEFAULT - Equivalent to VIDEO_CS_
709
- VIDEO_CS_601 - 601 color space
- VIDEO_CS_709 - 709 color space
- VIDEO_CS_SRGB - sRGB color space
---------------------
...
...
docs/sphinx/reference-outputs.rst
浏览文件 @
86147d97
...
...
@@ -686,6 +686,7 @@ Functions used by outputs
VIDEO_CS_DEFAULT,
VIDEO_CS_601,
VIDEO_CS_709,
VIDEO_CS_SRGB,
};
enum video_range_type {
...
...
libobs/media-io/video-io.h
浏览文件 @
86147d97
...
...
@@ -174,12 +174,12 @@ static inline const char *get_video_format_name(enum video_format format)
static
inline
const
char
*
get_video_colorspace_name
(
enum
video_colorspace
cs
)
{
switch
(
cs
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
return
"709"
;
case
VIDEO_CS_SRGB
:
return
"sRGB"
;
case
VIDEO_CS_601
:
case
VIDEO_CS_DEFAULT
:;
case
VIDEO_CS_601
:;
}
return
"601"
;
...
...
libobs/media-io/video-matrices.c
浏览文件 @
86147d97
...
...
@@ -171,9 +171,7 @@ bool video_format_get_parameters(enum video_colorspace color_space,
matrices_initialized
=
true
;
}
#endif
if
(
color_space
==
VIDEO_CS_DEFAULT
)
color_space
=
VIDEO_CS_601
;
else
if
(
color_space
==
VIDEO_CS_SRGB
)
if
((
color_space
==
VIDEO_CS_DEFAULT
)
||
(
color_space
==
VIDEO_CS_SRGB
))
color_space
=
VIDEO_CS_709
;
for
(
size_t
i
=
0
;
i
<
NUM_FORMATS
;
i
++
)
{
...
...
libobs/media-io/video-scaler-ffmpeg.c
浏览文件 @
86147d97
...
...
@@ -91,15 +91,9 @@ static inline int get_ffmpeg_scale_type(enum video_scale_type type)
static
inline
const
int
*
get_ffmpeg_coeffs
(
enum
video_colorspace
cs
)
{
switch
(
cs
)
{
case
VIDEO_CS_709
:
case
VIDEO_CS_SRGB
:
return
sws_getCoefficients
(
SWS_CS_ITU709
);
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
default:
return
sws_getCoefficients
(
SWS_CS_ITU601
);
}
const
int
colorspace
=
(
cs
==
VIDEO_CS_601
)
?
SWS_CS_ITU601
:
SWS_CS_ITU709
;
return
sws_getCoefficients
(
colorspace
);
}
static
inline
int
get_ffmpeg_range_type
(
enum
video_range_type
type
)
...
...
plugins/decklink/decklink-device-instance.cpp
浏览文件 @
86147d97
...
...
@@ -192,7 +192,7 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_)
#ifdef LOG_SETUP_VIDEO_FORMAT
LOG
(
LOG_INFO
,
"Setup video format: %s, %s, %s"
,
pixelFormat
==
bmdFormat8BitYUV
?
"YUV"
:
"RGB"
,
activeColorSpace
==
VIDEO_CS_
709
?
"BT.709"
:
"BT.601
"
,
activeColorSpace
==
VIDEO_CS_
601
?
"BT.601"
:
"BT.709
"
,
colorRange
==
VIDEO_RANGE_FULL
?
"full"
:
"limited"
);
#endif
}
...
...
enc-amf
@
272f0ffb
比较
6e934b6b
...
272f0ffb
Subproject commit
6e934b6b281cf675522ea43391376bd6bb089256
Subproject commit
272f0ffb70e489a48d1859b1bf7291931ff1ee9b
plugins/mac-avcapture/av-capture.mm
浏览文件 @
86147d97
...
...
@@ -442,11 +442,11 @@ static inline video_colorspace get_colorspace(CMFormatDescriptionRef desc)
return
VIDEO_CS_DEFAULT
;
if
(
CFStringCompare
(
static_cast
<
CFStringRef
>
(
matrix
),
kCVImageBufferYCbCrMatrix_ITU_R_
709_2
,
kCVImageBufferYCbCrMatrix_ITU_R_
601_4
,
0
)
==
kCFCompareEqualTo
)
return
VIDEO_CS_
709
;
return
VIDEO_CS_
601
;
return
VIDEO_CS_
601
;
return
VIDEO_CS_
709
;
}
static
inline
bool
update_colorspace
(
av_capture
*
capture
,
...
...
plugins/obs-ffmpeg/jim-nvenc.c
浏览文件 @
86147d97
...
...
@@ -431,12 +431,12 @@ static bool init_encoder(struct nvenc_data *enc, obs_data_t *settings)
vui_params
->
colourDescriptionPresentFlag
=
1
;
switch
(
voi
->
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
vui_params
->
colourPrimaries
=
6
;
vui_params
->
transferCharacteristics
=
6
;
vui_params
->
colourMatrix
=
6
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
vui_params
->
colourPrimaries
=
1
;
vui_params
->
transferCharacteristics
=
1
;
...
...
plugins/obs-ffmpeg/obs-ffmpeg-mux.c
浏览文件 @
86147d97
...
...
@@ -160,12 +160,12 @@ static void add_video_encoder_params(struct ffmpeg_muxer *stream,
enum
AVColorTransferCharacteristic
trc
=
AVCOL_TRC_UNSPECIFIED
;
enum
AVColorSpace
spc
=
AVCOL_SPC_UNSPECIFIED
;
switch
(
info
->
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
pri
=
AVCOL_PRI_SMPTE170M
;
trc
=
AVCOL_TRC_SMPTE170M
;
spc
=
AVCOL_SPC_SMPTE170M
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
pri
=
AVCOL_PRI_BT709
;
trc
=
AVCOL_TRC_BT709
;
...
...
plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
浏览文件 @
86147d97
...
...
@@ -241,12 +241,12 @@ static bool nvenc_update(void *data, obs_data_t *settings)
enc
->
context
->
max_b_frames
=
bf
;
switch
(
info
.
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
enc
->
context
->
color_trc
=
AVCOL_TRC_SMPTE170M
;
enc
->
context
->
color_primaries
=
AVCOL_PRI_SMPTE170M
;
enc
->
context
->
colorspace
=
AVCOL_SPC_SMPTE170M
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
enc
->
context
->
color_trc
=
AVCOL_TRC_BT709
;
enc
->
context
->
color_primaries
=
AVCOL_PRI_BT709
;
...
...
plugins/obs-ffmpeg/obs-ffmpeg-output.c
浏览文件 @
86147d97
...
...
@@ -1088,11 +1088,11 @@ static bool try_connect(struct ffmpeg_output *output)
config
.
color_range
=
voi
->
range
==
VIDEO_RANGE_FULL
?
AVCOL_RANGE_JPEG
:
AVCOL_RANGE_MPEG
;
switch
(
voi
->
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
config
.
color_primaries
=
AVCOL_PRI_SMPTE170M
;
config
.
color_trc
=
AVCOL_TRC_SMPTE170M
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
config
.
color_primaries
=
AVCOL_PRI_BT709
;
config
.
color_trc
=
AVCOL_TRC_BT709
;
...
...
@@ -1104,18 +1104,9 @@ static bool try_connect(struct ffmpeg_output *output)
}
if
(
format_is_yuv
(
voi
->
format
))
{
switch
(
voi
->
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
config
.
colorspace
=
AVCOL_SPC_SMPTE170M
;
break
;
case
VIDEO_CS_709
:
config
.
colorspace
=
AVCOL_SPC_BT709
;
break
;
case
VIDEO_CS_SRGB
:
config
.
colorspace
=
AVCOL_SPC_BT709
;
break
;
}
config
.
colorspace
=
(
voi
->
colorspace
==
VIDEO_CS_601
)
?
AVCOL_SPC_SMPTE170M
:
AVCOL_SPC_BT709
;
}
else
{
config
.
colorspace
=
AVCOL_SPC_RGB
;
}
...
...
plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c
浏览文件 @
86147d97
...
...
@@ -244,13 +244,29 @@ static bool vaapi_update(void *data, obs_data_t *settings)
enc
->
context
->
time_base
=
(
AVRational
){
voi
->
fps_den
,
voi
->
fps_num
};
enc
->
context
->
pix_fmt
=
obs_to_ffmpeg_video_format
(
info
.
format
);
enc
->
context
->
colorspace
=
info
.
colorspace
==
VIDEO_CS_709
?
AVCOL_SPC_BT709
:
AVCOL_SPC_BT470BG
;
enc
->
context
->
color_range
=
info
.
range
==
VIDEO_RANGE_FULL
?
AVCOL_RANGE_JPEG
:
AVCOL_RANGE_MPEG
;
switch
(
info
.
colorspace
)
{
case
VIDEO_CS_601
:
enc
->
context
->
color_trc
=
AVCOL_TRC_SMPTE170M
;
enc
->
context
->
color_primaries
=
AVCOL_PRI_SMPTE170M
;
enc
->
context
->
colorspace
=
AVCOL_SPC_SMPTE170M
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
enc
->
context
->
color_trc
=
AVCOL_TRC_BT709
;
enc
->
context
->
color_primaries
=
AVCOL_PRI_BT709
;
enc
->
context
->
colorspace
=
AVCOL_SPC_BT709
;
break
;
case
VIDEO_CS_SRGB
:
enc
->
context
->
color_trc
=
AVCOL_TRC_IEC61966_2_1
;
enc
->
context
->
color_primaries
=
AVCOL_PRI_BT709
;
enc
->
context
->
colorspace
=
AVCOL_SPC_BT709
;
break
;
}
if
(
keyint_sec
>
0
)
{
enc
->
context
->
gop_size
=
keyint_sec
*
voi
->
fps_num
/
voi
->
fps_den
;
...
...
plugins/obs-x264/obs-x264.c
浏览文件 @
86147d97
...
...
@@ -468,12 +468,12 @@ static void update_params(struct obs_x264 *obsx264, obs_data_t *settings,
const
char
*
transfer
=
NULL
;
const
char
*
colmatrix
=
NULL
;
switch
(
info
.
colorspace
)
{
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_601
:
colorprim
=
smpte170m
;
transfer
=
smpte170m
;
colmatrix
=
smpte170m
;
break
;
case
VIDEO_CS_DEFAULT
:
case
VIDEO_CS_709
:
colorprim
=
bt709
;
transfer
=
bt709
;
...
...
plugins/win-dshow/ffmpeg-decode.c
浏览文件 @
86147d97
...
...
@@ -270,6 +270,23 @@ bool ffmpeg_decode_audio(struct ffmpeg_decode *decode, uint8_t *data,
return
true
;
}
static
enum
video_colorspace
convert_color_space
(
enum
AVColorSpace
s
,
enum
AVColorTransferCharacteristic
trc
)
{
switch
(
s
)
{
case
AVCOL_SPC_BT709
:
return
(
trc
==
AVCOL_TRC_IEC61966_2_1
)
?
VIDEO_CS_SRGB
:
VIDEO_CS_709
;
case
AVCOL_SPC_FCC
:
case
AVCOL_SPC_BT470BG
:
case
AVCOL_SPC_SMPTE170M
:
case
AVCOL_SPC_SMPTE240M
:
return
VIDEO_CS_601
;
default:
return
VIDEO_CS_DEFAULT
;
}
}
bool
ffmpeg_decode_video
(
struct
ffmpeg_decode
*
decode
,
uint8_t
*
data
,
size_t
size
,
long
long
*
ts
,
enum
video_range_type
range
,
...
...
@@ -344,21 +361,22 @@ bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
:
VIDEO_RANGE_PARTIAL
;
}
if
(
range
!=
frame
->
range
)
{
const
bool
success
=
video_format_get_parameters
(
VIDEO_CS_601
,
range
,
frame
->
color_matrix
,
frame
->
color_range_min
,
frame
->
color_range_max
);
if
(
!
success
)
{
blog
(
LOG_ERROR
,
"Failed to get video format "
"parameters for video format %u"
,
VIDEO_CS_601
);
return
false
;
}
frame
->
range
=
range
;
const
enum
video_colorspace
cs
=
convert_color_space
(
decode
->
frame
->
colorspace
,
decode
->
frame
->
color_trc
);
const
bool
success
=
video_format_get_parameters
(
cs
,
range
,
frame
->
color_matrix
,
frame
->
color_range_min
,
frame
->
color_range_max
);
if
(
!
success
)
{
blog
(
LOG_ERROR
,
"Failed to get video format "
"parameters for video format %u"
,
cs
);
return
false
;
}
frame
->
range
=
range
;
*
ts
=
decode
->
frame
->
pkt_pts
;
frame
->
width
=
decode
->
frame
->
width
;
...
...
plugins/win-dshow/win-dshow.cpp
浏览文件 @
86147d97
...
...
@@ -1072,11 +1072,11 @@ DShowInput::GetColorSpace(obs_data_t *settings) const
if
(
astrcmpi
(
space
,
"709"
)
==
0
)
return
VIDEO_CS_709
;
else
if
(
astrcmpi
(
space
,
"601"
)
==
0
)
if
(
astrcmpi
(
space
,
"601"
)
==
0
)
return
VIDEO_CS_601
;
else
return
(
videoConfig
.
format
==
VideoFormat
::
HDYC
)
?
VIDEO_CS_709
:
VIDEO_CS_601
;
return
VIDEO_CS_DEFAULT
;
}
inline
enum
video_range_type
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录