Fixed EBML input cutting off zero bytes in places where it's not appropriate

This commit is contained in:
Thulinma 2018-10-10 11:37:07 +02:00
parent a53fd5fa63
commit ab39cca5f4
3 changed files with 15 additions and 8 deletions

View file

@ -516,6 +516,12 @@ namespace EBML{
return std::string(strPtr, strLen);
}
std::string Element::getValStringUntrimmed() const{
uint64_t strLen = getPayloadLen();
const char * strPtr = getPayload();
return std::string(strPtr, strLen);
}
uint64_t Block::getTrackNum() const{return UniInt::readInt(getPayload());}
int16_t Block::getTimecode() const{

View file

@ -97,6 +97,7 @@ namespace EBML{
int64_t getValInt() const;
double getValFloat() const;
std::string getValString() const;
std::string getValStringUntrimmed() const;
const Element findChild(uint32_t id) const;
private:

View file

@ -191,13 +191,13 @@ namespace Mist{
trueCodec = "H264";
trueType = "video";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "V_MPEGH/ISO/HEVC"){
trueCodec = "HEVC";
trueType = "video";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "V_AV1"){
trueCodec = "AV1";
@ -215,25 +215,25 @@ namespace Mist{
trueCodec = "opus";
trueType = "audio";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "A_VORBIS"){
trueCodec = "vorbis";
trueType = "audio";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "V_THEORA"){
trueCodec = "theora";
trueType = "video";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "A_AAC"){
trueCodec = "AAC";
trueType = "audio";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "A_PCM/INT/BIG"){
trueCodec = "PCM";
@ -275,12 +275,12 @@ namespace Mist{
trueCodec = "subtitle";
trueType = "meta";
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){init = tmpElem.getValString();}
if (tmpElem){init = tmpElem.getValStringUntrimmed();}
}
if (codec == "A_MS/ACM"){
tmpElem = E.findChild(EBML::EID_CODECPRIVATE);
if (tmpElem){
std::string WAVEFORMATEX = tmpElem.getValString();
std::string WAVEFORMATEX = tmpElem.getValStringUntrimmed();
unsigned int formatTag = Bit::btohs_le(WAVEFORMATEX.data());
switch (formatTag){
case 3: