Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Obs Studio
提交
e077880a
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,发现更多精彩内容 >>
提交
e077880a
编写于
9月 17, 2015
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
win-mf: Clean up encoder logging
上级
8280dbc5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
52 addition
and
20 deletion
+52
-20
plugins/win-mf/mf-common.cpp
plugins/win-mf/mf-common.cpp
+40
-18
plugins/win-mf/mf-encoder-descriptor.hpp
plugins/win-mf/mf-encoder-descriptor.hpp
+7
-0
plugins/win-mf/mf-h264-encoder.cpp
plugins/win-mf/mf-h264-encoder.cpp
+5
-2
未找到文件。
plugins/win-mf/mf-common.cpp
浏览文件 @
e077880a
...
...
@@ -6,6 +6,10 @@
#include <strsafe.h>
#include <wrl/client.h>
#include <string>
using
namespace
std
;
static
void
DBGMSG
(
PCWSTR
format
,
...)
{
va_list
args
;
...
...
@@ -181,7 +185,7 @@ static float OffsetToFloat(const MFOffset& offset)
return
offset
.
value
+
(
static_cast
<
float
>
(
offset
.
fract
)
/
65536.0
f
);
}
static
HRESULT
LogVideoArea
(
const
PROPVARIANT
&
var
)
static
HRESULT
LogVideoArea
(
wstring
&
str
,
const
PROPVARIANT
&
var
)
{
if
(
var
.
caub
.
cElems
<
sizeof
(
MFVideoArea
))
{
return
MF_E_BUFFERTOOSMALL
;
...
...
@@ -189,8 +193,15 @@ static HRESULT LogVideoArea(const PROPVARIANT& var)
MFVideoArea
*
pArea
=
(
MFVideoArea
*
)
var
.
caub
.
pElems
;
DBGMSG
(
L"(%f,%f) (%d,%d)"
,
OffsetToFloat
(
pArea
->
OffsetX
),
OffsetToFloat
(
pArea
->
OffsetY
),
pArea
->
Area
.
cx
,
pArea
->
Area
.
cy
);
str
+=
L"("
;
str
+=
to_wstring
(
OffsetToFloat
(
pArea
->
OffsetX
));
str
+=
L","
;
str
+=
to_wstring
(
OffsetToFloat
(
pArea
->
OffsetY
));
str
+=
L") ("
;
str
+=
to_wstring
(
pArea
->
Area
.
cx
);
str
+=
L","
;
str
+=
to_wstring
(
pArea
->
Area
.
cy
);
str
+=
L")"
;
return
S_OK
;
}
...
...
@@ -234,30 +245,33 @@ done:
return
hr
;
}
static
void
LogUINT32AsUINT64
(
const
PROPVARIANT
&
var
)
static
void
LogUINT32AsUINT64
(
wstring
&
str
,
const
PROPVARIANT
&
var
)
{
UINT32
uHigh
=
0
,
uLow
=
0
;
Unpack2UINT32AsUINT64
(
var
.
uhVal
.
QuadPart
,
&
uHigh
,
&
uLow
);
DBGMSG
(
L"%d x %d"
,
uHigh
,
uLow
);
str
+=
to_wstring
(
uHigh
);
str
+=
L" x "
;
str
+=
to_wstring
(
uLow
);
}
// Handle certain known special cases.
static
HRESULT
SpecialCaseAttributeValue
(
GUID
guid
,
const
PROPVARIANT
&
var
)
static
HRESULT
SpecialCaseAttributeValue
(
wstring
&
str
,
GUID
guid
,
const
PROPVARIANT
&
var
)
{
if
((
guid
==
MF_MT_FRAME_RATE
)
||
(
guid
==
MF_MT_FRAME_RATE_RANGE_MAX
)
||
(
guid
==
MF_MT_FRAME_RATE_RANGE_MIN
)
||
(
guid
==
MF_MT_FRAME_SIZE
)
||
(
guid
==
MF_MT_PIXEL_ASPECT_RATIO
))
{
// Attributes that contain two packed 32-bit values.
LogUINT32AsUINT64
(
var
);
LogUINT32AsUINT64
(
str
,
var
);
}
else
if
((
guid
==
MF_MT_GEOMETRIC_APERTURE
)
||
(
guid
==
MF_MT_MINIMUM_DISPLAY_APERTURE
)
||
(
guid
==
MF_MT_PAN_SCAN_APERTURE
))
{
// Attributes that an MFVideoArea structure.
return
LogVideoArea
(
var
);
return
LogVideoArea
(
str
,
var
);
}
else
{
return
S_FALSE
;
...
...
@@ -267,6 +281,8 @@ static HRESULT SpecialCaseAttributeValue(GUID guid, const PROPVARIANT& var)
static
HRESULT
LogAttributeValueByIndex
(
IMFAttributes
*
pAttr
,
DWORD
index
)
{
wstring
str
;
WCHAR
*
pGuidName
=
NULL
;
WCHAR
*
pGuidValName
=
NULL
;
...
...
@@ -285,52 +301,58 @@ static HRESULT LogAttributeValueByIndex(IMFAttributes *pAttr, DWORD index)
goto
done
;
}
DBGMSG
(
L"%s"
,
pGuidName
);
str
+=
L" "
;
str
+=
pGuidName
;
str
+=
L": "
;
hr
=
SpecialCaseAttributeValue
(
guid
,
var
);
hr
=
SpecialCaseAttributeValue
(
str
,
guid
,
var
);
if
(
FAILED
(
hr
))
{
goto
done
;
}
if
(
hr
==
S_FALSE
)
{
switch
(
var
.
vt
)
{
case
VT_UI4
:
DBGMSG
(
L"%d"
,
var
.
ulVal
);
str
+=
to_wstring
(
var
.
ulVal
);
break
;
case
VT_UI8
:
DBGMSG
(
L"%I64d"
,
var
.
uhVal
);
str
+=
to_wstring
(
var
.
uhVal
.
QuadPart
);
break
;
case
VT_R8
:
DBGMSG
(
L"%f"
,
var
.
dblVal
);
str
+=
to_wstring
(
var
.
dblVal
);
break
;
case
VT_CLSID
:
hr
=
GetGUIDName
(
*
var
.
puuid
,
&
pGuidValName
);
if
(
SUCCEEDED
(
hr
))
{
DBGMSG
(
pGuidValName
)
;
str
+=
pGuidValName
;
}
break
;
case
VT_LPWSTR
:
DBGMSG
(
var
.
pwszVal
)
;
str
+=
var
.
pwszVal
;
break
;
case
VT_VECTOR
|
VT_UI1
:
DBGMSG
(
L"<<byte array>>"
)
;
str
+=
L"<<byte array>>"
;
break
;
case
VT_UNKNOWN
:
DBGMSG
(
L"IUnknown"
)
;
str
+=
L"IUnknown"
;
break
;
default:
DBGMSG
(
L"Unexpected attribute type (vt = %d)"
,
var
.
vt
);
str
+=
L"Unexpected attribute type (vt = "
;
str
+=
to_wstring
(
var
.
vt
);
str
+=
L")"
;
break
;
}
}
DBGMSG
(
L"%s"
,
str
.
c_str
());
done:
CoTaskMemFree
(
pGuidName
);
CoTaskMemFree
(
pGuidValName
);
...
...
plugins/win-mf/mf-encoder-descriptor.hpp
浏览文件 @
e077880a
...
...
@@ -21,6 +21,13 @@ enum class EncoderType {
H264_VCE
,
};
static
const
char
*
typeNames
[]
=
{
"Software"
,
"Quicksync"
,
"NVENC"
,
"AMD VCE"
,
};
class
EncoderDescriptor
{
public:
static
std
::
vector
<
std
::
shared_ptr
<
EncoderDescriptor
>>
EncoderDescriptor
::
Enumerate
();
...
...
plugins/win-mf/mf-h264-encoder.cpp
浏览文件 @
e077880a
...
...
@@ -440,11 +440,14 @@ bool H264Encoder::Initialize(std::function<bool(void)> func)
goto
fail
;
}
MF_LOG
(
LOG_INFO
,
"Setting output type to transform"
);
MF_LOG
(
LOG_INFO
,
"Activating encoder: %s"
,
typeNames
[(
int
)
descriptor
->
Type
()]);
MF_LOG
(
LOG_INFO
,
" Setting output type to transform:"
);
LogMediaType
(
outputType
.
Get
());
HRC
(
transform
->
SetOutputType
(
0
,
outputType
.
Get
(),
0
));
MF_LOG
(
LOG_INFO
,
"
Setting input type to transform
"
);
MF_LOG
(
LOG_INFO
,
"
Setting input type to transform:
"
);
LogMediaType
(
inputType
.
Get
());
HRC
(
transform
->
SetInputType
(
0
,
inputType
.
Get
(),
0
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录