1 module main;
2 
3 import std.conv;
4 import std.stdio;
5 
6 import mediainfodll;
7 import mediainfo;
8 
9 int main(string[] args)
10 {
11     string fileName;
12     assert(args.length >= 2, "Pass a filename to scan to the program.");
13     fileName = args[1];
14 
15     //~ auto rc0 = MediaInfoDLL_Load();
16     //~ writeln("Loader result: ", rc0);
17     //~ auto rc1 = MediaInfoDLL_IsLoaded();
18     //~ writeln("IsLoaded result:", rc1);
19     //~ MediaInfoDLL_UnLoad();
20 
21     auto info = MediaInfo();
22 
23     string vstring = info.option("Info_Version", "0.7.38.0;DTest;0.1");
24     writefln("Found version %s", vstring);
25     if (vstring == "")
26         throw new Exception("Incompatible mediainfo version");
27 
28     //~ string infoParams = info.option("Info_Parameters");
29     //~ writeln(infoParams);
30     //~ string infoCodecs = info.option("Info_Codecs");
31     //~ writeln(infoCodecs);
32     string infoInternet = info.option("Internet", "No");
33     //~ writeln(infoInternet);
34 
35     info.open(fileName);
36     scope (exit)
37     {
38         info.close();
39     }
40     //~ string inform = info.inform();
41     //~ writefln("Got inform: %s", inform);
42 
43     const ulong nVideo = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Video);
44     const ulong nAudio = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Audio);
45     const ulong nText = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Text);
46 
47     if (nText == 0 && nVideo == 0 && nAudio == 0) {
48         writeln("Found no media info on this file.");
49         return 0;
50     }
51 
52     writefln("---%s---", info.get(MediaInfo_stream_t.MediaInfo_Stream_General, 0, "FileName"));
53     for (uint i = 0; i < nVideo; i++)
54     {
55         writefln("Video track %s:", i);
56         writefln("  Resolution: %s x %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i,
57                 "Width"), info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Height"));
58         writefln("  FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "FrameRate"));
59         writefln("  Duration: %s",
60                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Duration/String"));
61         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "BitRate");
62         if (brate != "")
63             writefln("  Bitrate: %s kbps", to!long(brate) / 1024);
64         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Format"));
65     }
66 
67     for (uint i = 0; i < nAudio; i++)
68     {
69         writefln("Audio track %s:", i);
70         std.stdio.writef("  Channels: %s",
71                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Channel(s)"));
72         string cpos = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "ChannelPositions");
73         if (cpos != "")
74             writefln(" (%s)", cpos);
75         else
76             writeln();
77         writefln("  Duration: %s",
78                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Duration/String"));
79         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate");
80         if (brate != "")
81         {
82             writefln("  Bitrate: %s kbps (%s)", to!long(brate) / 1024,
83                     info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate_Mode"));
84         }
85         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Format"));
86     }
87 
88     for (uint i = 0; i < nText; i++)
89     {
90         writefln("Text track %s:", i);
91         writefln("  Language: %s",
92                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Language"));
93         writefln("  FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "FrameRate"));
94         writefln("  Duration: %s",
95                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Duration/String"));
96         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "BitRate");
97         if (brate != "")
98             writefln("  Bitrate: %s kbps", to!long(brate) / 1024);
99         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Format"));
100     }
101     return 0;
102 }