Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
00bdf116
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,发现更多精彩内容 >>
提交
00bdf116
编写于
5月 05, 2014
作者:
P
Palana
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Bypass time conversion if AVCaptureInputPort has no clock
This should add compatibility for OSX < 10.9
上级
c36ce497
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
5 deletion
+21
-5
plugins/mac-avcapture/av-capture.m
plugins/mac-avcapture/av-capture.m
+21
-5
未找到文件。
plugins/mac-avcapture/av-capture.m
浏览文件 @
00bdf116
...
@@ -6,6 +6,10 @@
...
@@ -6,6 +6,10 @@
#include <obs.h>
#include <obs.h>
#include <media-io/video-io.h>
#include <media-io/video-io.h>
#define MILLI_TIMESCALE 1000
#define MICRO_TIMESCALE (MILLI_TIMESCALE * 1000)
#define NANO_TIMESCALE (MICRO_TIMESCALE * 1000)
#define AV_REV_FOURCC(x) \
#define AV_REV_FOURCC(x) \
(x >> 24), ((x >> 16) & 255), ((x >> 8) & 255), (x & 255)
(x >> 24), ((x >> 16) & 255), ((x >> 8) & 255), (x & 255)
...
@@ -33,6 +37,7 @@ struct av_capture {
...
@@ -33,6 +37,7 @@ struct av_capture {
OBSAVCaptureDelegate
*
delegate
;
OBSAVCaptureDelegate
*
delegate
;
dispatch_queue_t
queue
;
dispatch_queue_t
queue
;
bool
has_clock
;
unsigned
fourcc
;
unsigned
fourcc
;
enum
video_format
video_format
;
enum
video_format
video_format
;
...
@@ -89,15 +94,23 @@ static inline void update_frame_size(struct source_frame *frame,
...
@@ -89,15 +94,23 @@ static inline void update_frame_size(struct source_frame *frame,
CMSampleTimingInfo
info
;
CMSampleTimingInfo
info
;
CMSampleBufferGetSampleTimingInfo
(
sampleBuffer
,
0
,
&
info
);
CMSampleBufferGetSampleTimingInfo
(
sampleBuffer
,
0
,
&
info
);
CMTime
target_pts
;
if
(
capture
->
has_clock
)
{
AVCaptureInputPort
*
port
=
capture
->
device_input
.
ports
[
0
];
target_pts
=
CMSyncConvertTime
(
info
.
presentationTimeStamp
,
port
.
clock
,
CMClockGetHostTimeClock
());
}
else
{
target_pts
=
info
.
presentationTimeStamp
;
}
AVCaptureInputPort
*
port
=
capture
->
device_input
.
ports
[
0
];
CMTime
target_pts_nano
=
CMTimeConvertScale
(
info
.
presentationTimeStamp
,
NANO_TIMESCALE
,
CMTime
host_pts
=
CMSyncConvertTime
(
info
.
presentationTimeStamp
,
kCMTimeRoundingMethod_Default
);
port
.
clock
,
CMClockGetHostTimeClock
())
;
frame
->
timestamp
=
target_pts_nano
.
value
;
CVPixelBufferLockBaseAddress
(
img
,
kCVPixelBufferLock_ReadOnly
);
CVPixelBufferLockBaseAddress
(
img
,
kCVPixelBufferLock_ReadOnly
);
frame
->
timestamp
=
host_pts
.
value
;
frame
->
data
[
0
]
=
CVPixelBufferGetBaseAddress
(
img
);
frame
->
data
[
0
]
=
CVPixelBufferGetBaseAddress
(
img
);
obs_source_output_video
(
capture
->
source
,
frame
);
obs_source_output_video
(
capture
->
source
,
frame
);
...
@@ -290,6 +303,9 @@ static void av_capture_init(struct av_capture *capture, obs_data_t settings)
...
@@ -290,6 +303,9 @@ static void av_capture_init(struct av_capture *capture, obs_data_t settings)
if
(
!
init_device_input
(
capture
,
settings
))
if
(
!
init_device_input
(
capture
,
settings
))
return
;
return
;
AVCaptureInputPort
*
port
=
capture
->
device_input
.
ports
[
0
];
capture
->
has_clock
=
[
port
respondsToSelector
:
@selector
(
clock
)];
if
(
obs_data_getbool
(
settings
,
"use_preset"
))
{
if
(
obs_data_getbool
(
settings
,
"use_preset"
))
{
NSString
*
preset
=
[
NSString
NSString
*
preset
=
[
NSString
stringWithUTF8String:
obs_data_getstring
(
settings
,
stringWithUTF8String:
obs_data_getstring
(
settings
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录