summaryrefslogtreecommitdiff
path: root/libcore/extrecinfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcore/extrecinfo.c')
-rw-r--r--libcore/extrecinfo.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/libcore/extrecinfo.c b/libcore/extrecinfo.c
new file mode 100644
index 0000000..435d43b
--- /dev/null
+++ b/libcore/extrecinfo.c
@@ -0,0 +1,96 @@
+#include "../config.h"
+#include "helpers.h"
+#include "extrecinfo.h"
+
+cExtRecInfo::cExtRecInfo(const char *xml) {
+ this->xml = xml;
+}
+
+cExtRecInfo::~cExtRecInfo(void) {
+
+}
+
+bool cExtRecInfo::Parse(void) {
+ //read media info
+ string mediaInfoXml;
+ StripXmlTag(xml, mediaInfoXml, "mediainfo");
+ if (mediaInfoXml.size() == 0) {
+ return false;
+ }
+ StripXmlTag(mediaInfoXml, resWidth, "res_width");
+ StripXmlTag(mediaInfoXml, resHeight, "res_height");
+ resString = GetScreenResolutionString(resWidth, resHeight, &isHD);
+ StripXmlTag(mediaInfoXml, aspectratio, "aspectratio");
+ isWideScreen = !aspectratio.compare("16:9");
+ StripXmlTag(mediaInfoXml, codec, "codec");
+ StripXmlTag(mediaInfoXml, format, "format");
+ StripXmlTag(mediaInfoXml, framerate, "framerate");
+ StripXmlTag(mediaInfoXml, interlace, "interlace");
+
+ size_t found = 0;
+ isDolby = false;
+ do {
+ string track;
+ found = StripXmlTag(mediaInfoXml, track, "track", found);
+ if (found == string::npos)
+ break;
+ tAudioTrack sTrack;
+ StripXmlTag(track, sTrack.codec, "codec");
+ StripXmlTag(track, sTrack.bitrate, "bitrate");
+ StripXmlTag(track, sTrack.language, "language");
+ if (!sTrack.codec.compare("AC-3"))
+ isDolby = true;
+ tracks.push_back(sTrack);
+ } while (found != string::npos);
+
+ return true;
+}
+
+//get content of <tag> ... </tag> inside xml
+size_t cExtRecInfo::StripXmlTag(string &xmlstring, string &content, const char *tag, int start) {
+ // set the search strings
+ stringstream strStart, strStop;
+ strStart << "<" << tag << ">";
+ strStop << "</" << tag << ">";
+ // find the strings
+ size_t locStart = xmlstring.find(strStart.str(), start);
+ size_t locStop = xmlstring.find(strStop.str(), start);
+ if (locStart == string::npos || locStop == string::npos)
+ return string::npos;
+ // extract relevant text
+ int pos = locStart + strStart.str().size();
+ int len = locStop - pos;
+
+ content = (len < 0) ? "" : xmlstring.substr(pos, len);
+ return locStop + strStop.str().size();
+}
+
+size_t cExtRecInfo::StripXmlTag(string &xmlstring, int &content, const char *tag, int start) {
+ // set the search strings
+ stringstream strStart, strStop;
+ strStart << "<" << tag << ">";
+ strStop << "</" << tag << ">";
+ // find the strings
+ size_t locStart = xmlstring.find(strStart.str(), start);
+ size_t locStop = xmlstring.find(strStop.str(), start);
+ if (locStart == string::npos || locStop == string::npos)
+ return string::npos;
+ // extract relevant text
+ int pos = locStart + strStart.str().size();
+ int len = locStop - pos;
+
+ string value = (len < 0) ? "" : xmlstring.substr(pos, len);
+ content = atoi(value.c_str());
+ return locStop + strStop.str().size();
+}
+
+void cExtRecInfo::Debug(void) {
+ dsyslog("skindesigner: extRecInfo xml: %s", xml.c_str());
+ dsyslog("skindesigner: : res_width %d, res_height %d, res %s, aspectratio %s, codec %s, format %s, framerate %s, interlace %s, hd %s, widescreen %s",
+ resWidth, resHeight, resString.c_str(), aspectratio.c_str(), codec.c_str(), format.c_str(), framerate.c_str(), interlace.c_str(),
+ isHD ? "true": "false", isWideScreen ? "true" : "false");
+ int numTrack = 1;
+ for (vector<tAudioTrack>::iterator it = tracks.begin(); it != tracks.end(); it++) {
+ dsyslog("skindesigner: audio track %d, codec %s, bitrate %s, language: %s", numTrack++, (*it).codec.c_str(), (*it).bitrate.c_str(), (*it).language.c_str());
+ }
+}