Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
908a165d
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
908a165d
编写于
4月 16, 2015
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add planar YUV 4:4:4 format support
Adds the ability to natively output with planar YUV 4:4:4.
上级
822d1ec3
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
72 addition
and
0 deletion
+72
-0
libobs/media-io/video-frame.c
libobs/media-io/video-frame.c
+17
-0
libobs/media-io/video-io.h
libobs/media-io/video-io.h
+4
-0
libobs/media-io/video-scaler-ffmpeg.c
libobs/media-io/video-scaler-ffmpeg.c
+1
-0
libobs/obs-source.c
libobs/obs-source.c
+8
-0
libobs/obs-video.c
libobs/obs-video.c
+6
-0
libobs/obs.c
libobs/obs.c
+34
-0
plugins/obs-ffmpeg/obs-ffmpeg-formats.h
plugins/obs-ffmpeg/obs-ffmpeg-formats.h
+2
-0
未找到文件。
libobs/media-io/video-frame.c
浏览文件 @
908a165d
...
...
@@ -83,6 +83,17 @@ void video_frame_init(struct video_frame *frame, enum video_format format,
frame
->
data
[
0
]
=
bmalloc
(
size
);
frame
->
linesize
[
0
]
=
width
*
4
;
break
;
case
VIDEO_FORMAT_I444
:
size
=
width
*
height
;
ALIGN_SIZE
(
size
,
alignment
);
frame
->
data
[
0
]
=
bmalloc
(
size
*
3
);
frame
->
data
[
1
]
=
(
uint8_t
*
)
frame
->
data
[
0
]
+
size
;
frame
->
data
[
2
]
=
(
uint8_t
*
)
frame
->
data
[
1
]
+
size
;
frame
->
linesize
[
0
]
=
width
;
frame
->
linesize
[
1
]
=
width
;
frame
->
linesize
[
2
]
=
width
;
break
;
}
}
...
...
@@ -112,5 +123,11 @@ void video_frame_copy(struct video_frame *dst, const struct video_frame *src,
case
VIDEO_FORMAT_BGRX
:
memcpy
(
dst
->
data
[
0
],
src
->
data
[
0
],
src
->
linesize
[
0
]
*
cy
);
break
;
case
VIDEO_FORMAT_I444
:
memcpy
(
dst
->
data
[
0
],
src
->
data
[
0
],
src
->
linesize
[
0
]
*
cy
);
memcpy
(
dst
->
data
[
1
],
src
->
data
[
1
],
src
->
linesize
[
1
]
*
cy
);
memcpy
(
dst
->
data
[
2
],
src
->
data
[
2
],
src
->
linesize
[
2
]
*
cy
);
break
;
}
}
libobs/media-io/video-io.h
浏览文件 @
908a165d
...
...
@@ -46,6 +46,9 @@ enum video_format {
VIDEO_FORMAT_RGBA
,
VIDEO_FORMAT_BGRA
,
VIDEO_FORMAT_BGRX
,
/* planar 4:4:4 */
VIDEO_FORMAT_I444
,
};
enum
video_colorspace
{
...
...
@@ -88,6 +91,7 @@ static inline bool format_is_yuv(enum video_format format)
case
VIDEO_FORMAT_YVYU
:
case
VIDEO_FORMAT_YUY2
:
case
VIDEO_FORMAT_UYVY
:
case
VIDEO_FORMAT_I444
:
return
true
;
case
VIDEO_FORMAT_NONE
:
case
VIDEO_FORMAT_RGBA
:
...
...
libobs/media-io/video-scaler-ffmpeg.c
浏览文件 @
908a165d
...
...
@@ -38,6 +38,7 @@ static inline enum AVPixelFormat get_ffmpeg_video_format(
case
VIDEO_FORMAT_RGBA
:
return
AV_PIX_FMT_RGBA
;
case
VIDEO_FORMAT_BGRA
:
return
AV_PIX_FMT_BGRA
;
case
VIDEO_FORMAT_BGRX
:
return
AV_PIX_FMT_BGRA
;
case
VIDEO_FORMAT_I444
:
return
AV_PIX_FMT_YUV444P
;
}
return
AV_PIX_FMT_NONE
;
...
...
libobs/obs-source.c
浏览文件 @
908a165d
...
...
@@ -791,6 +791,7 @@ static inline enum convert_type get_convert_type(enum video_format format)
case
VIDEO_FORMAT_UYVY
:
return
CONVERT_422_U
;
case
VIDEO_FORMAT_I444
:
case
VIDEO_FORMAT_NONE
:
case
VIDEO_FORMAT_RGBA
:
case
VIDEO_FORMAT_BGRA
:
...
...
@@ -963,6 +964,7 @@ static const char *select_conversion_technique(enum video_format format)
case
VIDEO_FORMAT_BGRX
:
case
VIDEO_FORMAT_RGBA
:
case
VIDEO_FORMAT_NONE
:
case
VIDEO_FORMAT_I444
:
assert
(
false
&&
"No conversion requested"
);
break
;
}
...
...
@@ -1598,6 +1600,12 @@ static void copy_frame_data(struct obs_source_frame *dst,
copy_frame_data_plane
(
dst
,
src
,
1
,
dst
->
height
/
2
);
break
;
case
VIDEO_FORMAT_I444
:
copy_frame_data_plane
(
dst
,
src
,
0
,
dst
->
height
);
copy_frame_data_plane
(
dst
,
src
,
1
,
dst
->
height
);
copy_frame_data_plane
(
dst
,
src
,
2
,
dst
->
height
);
break
;
case
VIDEO_FORMAT_YVYU
:
case
VIDEO_FORMAT_YUY2
:
case
VIDEO_FORMAT_UYVY
:
...
...
libobs/obs-video.c
浏览文件 @
908a165d
...
...
@@ -457,6 +457,12 @@ static void convert_frame(
0
,
info
->
height
,
output
->
data
,
output
->
linesize
);
}
else
if
(
info
->
format
==
VIDEO_FORMAT_I444
)
{
convert_uyvx_to_i444
(
input
->
data
[
0
],
input
->
linesize
[
0
],
0
,
info
->
height
,
output
->
data
,
output
->
linesize
);
}
else
{
blog
(
LOG_ERROR
,
"convert_frame: unsupported texture format"
);
}
...
...
libobs/obs.c
浏览文件 @
908a165d
...
...
@@ -118,6 +118,37 @@ static inline void set_nv12_sizes(const struct obs_video_info *ovi)
video
->
conversion_tech
=
"NV12"
;
}
static
inline
void
set_444p_sizes
(
const
struct
obs_video_info
*
ovi
)
{
struct
obs_core_video
*
video
=
&
obs
->
video
;
uint32_t
chroma_pixels
;
uint32_t
total_bytes
;
chroma_pixels
=
(
ovi
->
output_width
*
ovi
->
output_height
);
chroma_pixels
=
GET_ALIGN
(
chroma_pixels
,
PIXEL_SIZE
);
video
->
plane_offsets
[
0
]
=
0
;
video
->
plane_offsets
[
1
]
=
chroma_pixels
;
video
->
plane_offsets
[
2
]
=
chroma_pixels
+
chroma_pixels
;
video
->
plane_linewidth
[
0
]
=
ovi
->
output_width
;
video
->
plane_linewidth
[
1
]
=
ovi
->
output_width
;
video
->
plane_linewidth
[
2
]
=
ovi
->
output_width
;
video
->
plane_sizes
[
0
]
=
chroma_pixels
;
video
->
plane_sizes
[
1
]
=
chroma_pixels
;
video
->
plane_sizes
[
2
]
=
chroma_pixels
;
total_bytes
=
video
->
plane_offsets
[
2
]
+
chroma_pixels
;
video
->
conversion_height
=
(
total_bytes
/
PIXEL_SIZE
+
ovi
->
output_width
-
1
)
/
ovi
->
output_width
;
video
->
conversion_height
=
GET_ALIGN
(
video
->
conversion_height
,
2
);
video
->
conversion_tech
=
"Planar444"
;
}
static
inline
void
calc_gpu_conversion_sizes
(
const
struct
obs_video_info
*
ovi
)
{
obs
->
video
.
conversion_height
=
0
;
...
...
@@ -133,6 +164,9 @@ static inline void calc_gpu_conversion_sizes(const struct obs_video_info *ovi)
case
VIDEO_FORMAT_NV12
:
set_nv12_sizes
(
ovi
);
break
;
case
VIDEO_FORMAT_I444
:
set_444p_sizes
(
ovi
);
break
;
}
}
...
...
plugins/obs-ffmpeg/obs-ffmpeg-formats.h
浏览文件 @
908a165d
...
...
@@ -12,6 +12,7 @@ static inline enum AVPixelFormat obs_to_ffmpeg_video_format(
{
switch
(
format
)
{
case
VIDEO_FORMAT_NONE
:
return
AV_PIX_FMT_NONE
;
case
VIDEO_FORMAT_I444
:
return
AV_PIX_FMT_YUV444P
;
case
VIDEO_FORMAT_I420
:
return
AV_PIX_FMT_YUV420P
;
case
VIDEO_FORMAT_NV12
:
return
AV_PIX_FMT_NV12
;
case
VIDEO_FORMAT_YVYU
:
return
AV_PIX_FMT_NONE
;
...
...
@@ -29,6 +30,7 @@ static inline enum video_format ffmpeg_to_obs_video_format(
enum
AVPixelFormat
format
)
{
switch
(
format
)
{
case
AV_PIX_FMT_YUV444P
:
return
VIDEO_FORMAT_I444
;
case
AV_PIX_FMT_YUV420P
:
return
VIDEO_FORMAT_I420
;
case
AV_PIX_FMT_NV12
:
return
VIDEO_FORMAT_NV12
;
case
AV_PIX_FMT_YUYV422
:
return
VIDEO_FORMAT_YUY2
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录