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     const 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 nImage = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Image);
46     const ulong nText = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Text);
47 
48     if (nText == 0 && nVideo == 0 && nImage == 0 && nAudio == 0) {
49         writeln("Found no media info on this file.");
50         return 0;
51     }
52 
53     writefln("---%s---", info.get(MediaInfo_stream_t.MediaInfo_Stream_General, 0, "FileName"));
54     for (uint i = 0; i < nVideo; i++)
55     {
56         writefln("Video track %s:", i);
57         writefln("  Resolution: %s x %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i,
58                 "Width"), info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Height"));
59         writefln("  FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "FrameRate"));
60         writefln("  Duration: %s",
61                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Duration/String"));
62         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "BitRate");
63         if (brate != "")
64             writefln("  Bitrate: %s kbps", to!long(brate) / 1024);
65         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Format"));
66     }
67 
68     for (uint i = 0; i < nAudio; i++)
69     {
70         writefln("Audio track %s:", i);
71         writef("  Channels: %s",
72                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Channel(s)"));
73         string cpos = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "ChannelPositions");
74         if (cpos != "")
75             writefln(" (%s)", cpos);
76         else
77             writeln();
78         writefln("  Duration: %s",
79                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Duration/String"));
80         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate");
81         if (brate != "")
82         {
83             writefln("  Bitrate: %s kbps (%s)", to!long(brate) / 1024,
84                     info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate_Mode"));
85         }
86         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Format"));
87     }
88 
89     for (uint i = 0; i < nImage; i++)
90     {
91         writefln("Image info %s:", i);
92         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Format"));
93         writefln("  Width: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Width"));
94         writefln("  Height: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Height"));
95         writefln("  Inform:\n %s", info.inform());
96     }
97 
98     for (uint i = 0; i < nText; i++)
99     {
100         writefln("Text track %s:", i);
101         writefln("  Language: %s",
102                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Language"));
103         writefln("  FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "FrameRate"));
104         writefln("  Duration: %s",
105                 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Duration/String"));
106         string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "BitRate");
107         if (brate != "")
108             writefln("  Bitrate: %s kbps", to!long(brate) / 1024);
109         writefln("  Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Format"));
110     }
111     return 0;
112 }