forked from clsid2/mpc-hc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ITrackInfo.h
84 lines (73 loc) · 3.73 KB
/
ITrackInfo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* (C) 2003-2006 Gabest
* (C) 2006-2013, 2017 see Authors.txt
*
* This file is part of MPC-HC.
*
* MPC-HC is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* MPC-HC is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
enum TrackType {
TypeVideo = 1,
TypeAudio = 2,
TypeComplex = 3,
TypeLogo = 0x10,
TypeSubtitle = 0x11,
TypeControl = 0x20
};
#pragma pack(push, 1)
struct TrackElement {
WORD Size; // Size of this structure
BYTE Type; // See TrackType
BOOL FlagDefault; // Set if the track is the default for its TrackType.
BOOL FlagForced; // Set if that track MUST be used during playback.
BOOL FlagLacing; // Set if the track may contain blocks using lacing.
UINT MinCache; // The minimum number of frames a player should be able to cache during playback.
UINT MaxCache; // The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.
CHAR Language[4]; // Specifies the language of the track, in the ISO-639-2 form. (end with '\0')
};
struct TrackExtendedInfoVideo {
WORD Size; // Size of this structure
BOOL Interlaced; // Set if the video is interlaced.
UINT PixelWidth; // Width of the encoded video frames in pixels.
UINT PixelHeight; // Height of the encoded video frames in pixels.
UINT DisplayWidth; // Width of the video frames to display.
UINT DisplayHeight; // Height of the video frames to display.
BYTE DisplayUnit; // Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches).
BYTE AspectRatioType; // Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).
};
struct TrackExtendedInfoAudio {
WORD Size; // Size of this structure
float SamplingFreq; // Sampling frequency in Hz.
float OutputSamplingFrequency; // Real output sampling frequency in Hz (used for SBR techniques).
UINT Channels; // Numbers of channels in the track.
UINT BitDepth; // Bits per sample, mostly used for PCM.
};
#pragma pack(pop)
interface __declspec(uuid("03E98D51-DDE7-43aa-B70C-42EF84A3A23D"))
ITrackInfo :
public IUnknown
{
STDMETHOD_(UINT, GetTrackCount)() = 0;
// \param aTrackIdx the track index (from 0 to GetTrackCount()-1)
STDMETHOD_(BOOL, GetTrackInfo)(UINT aTrackIdx, struct TrackElement* pStructureToFill) = 0;
// Get an extended information struct relative to the track type
STDMETHOD_(BOOL, GetTrackExtendedInfo)(UINT aTrackIdx, void* pStructureToFill) = 0;
STDMETHOD_(BSTR, GetTrackCodecID)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecInfoURL)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecDownloadURL)(UINT aTrackIdx) = 0;
};