1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
40
****************************************************************************/
44
HRESULT qt_wmf_getFourCC(IMFMediaType *type, DWORD *fourCC)
50
GUID guidSubType = GUID_NULL;
53
hr = type->GetGUID(MF_MT_SUBTYPE, &guidSubType);
56
*fourCC = guidSubType.Data1;
61
MFRatio qt_wmf_getPixelAspectRatio(IMFMediaType *type)
63
MFRatio ratio = { 0, 0 };
66
hr = MFGetAttributeRatio(type, MF_MT_PIXEL_ASPECT_RATIO, (UINT32*)&ratio.Numerator, (UINT32*)&ratio.Denominator);
69
ratio.Denominator = 1;
74
bool qt_wmf_areMediaTypesEqual(IMFMediaType *type1, IMFMediaType *type2)
78
else if (!type1 || !type2)
82
HRESULT hr = type1->IsEqual(type2, &dwFlags);
87
HRESULT qt_wmf_validateVideoArea(const MFVideoArea& area, UINT32 width, UINT32 height)
89
float fOffsetX = qt_wmf_MFOffsetToFloat(area.OffsetX);
90
float fOffsetY = qt_wmf_MFOffsetToFloat(area.OffsetY);
92
if ( ((LONG)fOffsetX + area.Area.cx > (LONG)width) ||
93
((LONG)fOffsetY + area.Area.cy > (LONG)height) )
94
return MF_E_INVALIDMEDIATYPE;
99
bool qt_wmf_isSampleTimePassed(IMFClock *clock, IMFSample *sample)
101
if (!sample || !clock)
105
MFTIME hnsTimeNow = 0;
106
MFTIME hnsSystemTime = 0;
107
MFTIME hnsSampleStart = 0;
108
MFTIME hnsSampleDuration = 0;
110
hr = clock->GetCorrelatedTime(0, &hnsTimeNow, &hnsSystemTime);
113
hr = sample->GetSampleTime(&hnsSampleStart);
116
hr = sample->GetSampleDuration(&hnsSampleDuration);
119
if (hnsSampleStart + hnsSampleDuration < hnsTimeNow)