mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 15:58:31 +00:00
added extented recording information
This commit is contained in:
96
libcore/extrecinfo.c
Normal file
96
libcore/extrecinfo.c
Normal file
@@ -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());
|
||||
}
|
||||
}
|
36
libcore/extrecinfo.h
Normal file
36
libcore/extrecinfo.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef __EXTRECINFO_H
|
||||
#define __EXTRECINFO_H
|
||||
|
||||
#include <vdr/recording.h>
|
||||
|
||||
struct tAudioTrack {
|
||||
string codec;
|
||||
string bitrate;
|
||||
string language;
|
||||
};
|
||||
|
||||
class cExtRecInfo {
|
||||
private:
|
||||
string xml;
|
||||
size_t StripXmlTag(string &xmlstring, string &content, const char *tag, int start = 0);
|
||||
size_t StripXmlTag(string &xmlstring, int &content, const char *tag, int start = 0);
|
||||
public:
|
||||
cExtRecInfo(const char *xml);
|
||||
~cExtRecInfo(void);
|
||||
bool Parse(void);
|
||||
void Debug(void);
|
||||
int resWidth;
|
||||
int resHeight;
|
||||
string resString;
|
||||
bool isHD;
|
||||
string aspectratio;
|
||||
bool isWideScreen;
|
||||
string codec;
|
||||
string format;
|
||||
string framerate;
|
||||
string interlace;
|
||||
bool isDolby;
|
||||
vector< tAudioTrack > tracks;
|
||||
};
|
||||
|
||||
#endif // __EXTRECINFO_H
|
@@ -175,3 +175,46 @@ void cStopWatch::Report(const char* message) {
|
||||
void cStopWatch::Stop(const char* message) {
|
||||
dsyslog("skindesigner: %s - needed %d ms", message, (int)(cTimeMs::Now() - start));
|
||||
}
|
||||
|
||||
//View Helpers
|
||||
string GetScreenResolutionString(int width, int height, bool *isHD) {
|
||||
string name = "";
|
||||
switch (width) {
|
||||
case 1920:
|
||||
case 1440:
|
||||
name = "hd1080i";
|
||||
*isHD = true;
|
||||
break;
|
||||
case 1280:
|
||||
if (height == 720)
|
||||
name = "hd720p";
|
||||
else
|
||||
name = "hd1080i";
|
||||
*isHD = true;
|
||||
break;
|
||||
case 720:
|
||||
name = "sd576i";
|
||||
break;
|
||||
default:
|
||||
name = "sd576i";
|
||||
break;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
string GetScreenAspectString(double aspect, bool *isWideScreen) {
|
||||
string name = "";
|
||||
*isWideScreen = false;
|
||||
if (aspect == 4.0/3.0) {
|
||||
name = "4:3";
|
||||
*isWideScreen = false;
|
||||
} else if (aspect == 16.0/9.0) {
|
||||
name = "16:9";
|
||||
*isWideScreen = true;
|
||||
} else if (aspect == 2.21) {
|
||||
name = "21:9";
|
||||
*isWideScreen = true;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
|
@@ -37,4 +37,8 @@ public:
|
||||
void Report(const char* message);
|
||||
void Stop(const char* message);
|
||||
};
|
||||
|
||||
string GetScreenResolutionString(int width, int height, bool *isHD);
|
||||
string GetScreenAspectString(double aspect, bool *isWideScreen);
|
||||
|
||||
#endif // __HELPERS_H
|
||||
|
Reference in New Issue
Block a user