fixed the issue 234
Change-Id: Ie527263ae2862426e8c58fce13b34da4c792cc01
This commit is contained in:
@@ -19,7 +19,6 @@ mkvparser::IMkvReader::~IMkvReader()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mkvparser::GetVersion(int& major, int& minor, int& build, int& revision)
|
void mkvparser::GetVersion(int& major, int& minor, int& build, int& revision)
|
||||||
{
|
{
|
||||||
major = 1;
|
major = 1;
|
||||||
@@ -28,7 +27,6 @@ void mkvparser::GetVersion(int& major, int& minor, int& build, int& revision)
|
|||||||
revision = 7;
|
revision = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
long long mkvparser::ReadUInt(IMkvReader* pReader, long long pos, long& len)
|
long long mkvparser::ReadUInt(IMkvReader* pReader, long long pos, long& len)
|
||||||
{
|
{
|
||||||
assert(pReader);
|
assert(pReader);
|
||||||
@@ -235,6 +233,7 @@ long long mkvparser::UnserializeUInt(
|
|||||||
|
|
||||||
if (hr < 0)
|
if (hr < 0)
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
result <<= 8;
|
result <<= 8;
|
||||||
result |= b;
|
result |= b;
|
||||||
|
|
||||||
@@ -366,7 +365,6 @@ bool mkvparser::Match(
|
|||||||
long long& pos,
|
long long& pos,
|
||||||
unsigned long id_,
|
unsigned long id_,
|
||||||
long long& val)
|
long long& val)
|
||||||
|
|
||||||
{
|
{
|
||||||
assert(pReader);
|
assert(pReader);
|
||||||
assert(pos >= 0);
|
assert(pos >= 0);
|
||||||
@@ -2984,13 +2982,12 @@ Track::~Track()
|
|||||||
Track::Info::Info():
|
Track::Info::Info():
|
||||||
type(-1),
|
type(-1),
|
||||||
number(-1),
|
number(-1),
|
||||||
uid(-1),
|
uid(ULLONG_MAX),
|
||||||
nameAsUTF8(NULL),
|
nameAsUTF8(NULL),
|
||||||
codecId(NULL),
|
codecId(NULL),
|
||||||
codecPrivate(NULL),
|
codecPrivate(NULL),
|
||||||
codecPrivateSize(0),
|
codecPrivateSize(0),
|
||||||
codecNameAsUTF8(NULL)
|
codecNameAsUTF8(NULL)
|
||||||
//lacing(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3027,6 +3024,11 @@ long long Track::GetNumber() const
|
|||||||
return m_info.number;
|
return m_info.number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long long Track::GetUid() const
|
||||||
|
{
|
||||||
|
return m_info.uid;
|
||||||
|
}
|
||||||
|
|
||||||
const char* Track::GetNameAsUTF8() const
|
const char* Track::GetNameAsUTF8() const
|
||||||
{
|
{
|
||||||
return m_info.nameAsUTF8;
|
return m_info.nameAsUTF8;
|
||||||
@@ -3530,8 +3532,8 @@ void Tracks::ParseTrackEntry(
|
|||||||
#endif
|
#endif
|
||||||
if (Match(pReader, pos, 0x57, i.number))
|
if (Match(pReader, pos, 0x57, i.number))
|
||||||
assert(i.number > 0);
|
assert(i.number > 0);
|
||||||
else if (Match(pReader, pos, 0x33C5, i.uid))
|
//else if (Match(pReader, pos, 0x33C5, i.uid))
|
||||||
;
|
// ;
|
||||||
else if (Match(pReader, pos, 0x03, i.type))
|
else if (Match(pReader, pos, 0x03, i.type))
|
||||||
;
|
;
|
||||||
else if (Match(pReader, pos, 0x136E, i.nameAsUTF8))
|
else if (Match(pReader, pos, 0x136E, i.nameAsUTF8))
|
||||||
@@ -3552,6 +3554,9 @@ void Tracks::ParseTrackEntry(
|
|||||||
{
|
{
|
||||||
long len;
|
long len;
|
||||||
|
|
||||||
|
const long long idpos = pos;
|
||||||
|
idpos;
|
||||||
|
|
||||||
const long long id = ReadUInt(pReader, pos, len);
|
const long long id = ReadUInt(pReader, pos, len);
|
||||||
assert(id >= 0); //TODO: handle error case
|
assert(id >= 0); //TODO: handle error case
|
||||||
assert((pos + len) <= stop);
|
assert((pos + len) <= stop);
|
||||||
@@ -3578,6 +3583,27 @@ void Tracks::ParseTrackEntry(
|
|||||||
audioSettings.start = start;
|
audioSettings.start = start;
|
||||||
audioSettings.size = size;
|
audioSettings.size = size;
|
||||||
}
|
}
|
||||||
|
else if (id == 0x33C5) //Track UID
|
||||||
|
{
|
||||||
|
assert(size <= 8);
|
||||||
|
|
||||||
|
i.uid = 0;
|
||||||
|
long long pos_ = start;
|
||||||
|
const long long pos_end = start + size;
|
||||||
|
|
||||||
|
while (pos_ != pos_end)
|
||||||
|
{
|
||||||
|
unsigned char b;
|
||||||
|
|
||||||
|
const long status = pReader->Read(pos_, 1, &b);
|
||||||
|
assert(status == 0);
|
||||||
|
|
||||||
|
i.uid <<= 8;
|
||||||
|
i.uid |= b;
|
||||||
|
|
||||||
|
++pos_;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ short Unserialize2SInt(IMkvReader*, long long);
|
|||||||
signed char Unserialize1SInt(IMkvReader*, long long);
|
signed char Unserialize1SInt(IMkvReader*, long long);
|
||||||
bool Match(IMkvReader*, long long&, unsigned long, long long&);
|
bool Match(IMkvReader*, long long&, unsigned long, long long&);
|
||||||
bool Match(IMkvReader*, long long&, unsigned long, char*&);
|
bool Match(IMkvReader*, long long&, unsigned long, char*&);
|
||||||
bool Match(IMkvReader*, long long&, unsigned long,unsigned char*&, size_t&);
|
bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&);
|
||||||
bool Match(IMkvReader*, long long&, unsigned long, double&);
|
bool Match(IMkvReader*, long long&, unsigned long, double&);
|
||||||
bool Match(IMkvReader*, long long&, unsigned long, short&);
|
bool Match(IMkvReader*, long long&, unsigned long, short&);
|
||||||
|
|
||||||
@@ -209,6 +209,7 @@ public:
|
|||||||
|
|
||||||
long long GetType() const;
|
long long GetType() const;
|
||||||
long long GetNumber() const;
|
long long GetNumber() const;
|
||||||
|
unsigned long long GetUid() const;
|
||||||
const char* GetNameAsUTF8() const;
|
const char* GetNameAsUTF8() const;
|
||||||
const char* GetCodecNameAsUTF8() const;
|
const char* GetCodecNameAsUTF8() const;
|
||||||
const char* GetCodecId() const;
|
const char* GetCodecId() const;
|
||||||
@@ -227,7 +228,7 @@ public:
|
|||||||
{
|
{
|
||||||
long long type;
|
long long type;
|
||||||
long long number;
|
long long number;
|
||||||
long long uid;
|
unsigned long long uid;
|
||||||
char* nameAsUTF8;
|
char* nameAsUTF8;
|
||||||
char* codecId;
|
char* codecId;
|
||||||
unsigned char* codecPrivate;
|
unsigned char* codecPrivate;
|
||||||
|
|||||||
15
sample.cpp
15
sample.cpp
@@ -148,14 +148,14 @@ int main(int argc, char* argv[])
|
|||||||
if (pTrack == NULL)
|
if (pTrack == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const long long trackType_ = pTrack->GetType();
|
const long long trackType = pTrack->GetType();
|
||||||
unsigned long trackType = static_cast<unsigned long>(trackType_);
|
const long long trackNumber = pTrack->GetNumber();
|
||||||
|
const unsigned long long trackUid = pTrack->GetUid();
|
||||||
unsigned long trackNumber = pTrack->GetNumber();
|
|
||||||
const wchar_t* const pTrackName = utf8towcs(pTrack->GetNameAsUTF8());
|
const wchar_t* const pTrackName = utf8towcs(pTrack->GetNameAsUTF8());
|
||||||
|
|
||||||
printf("\t\tTrack Type\t\t: %ld\n", trackType);
|
printf("\t\tTrack Type\t\t: %ld\n", trackType);
|
||||||
printf("\t\tTrack Number\t\t: %ld\n", trackNumber);
|
printf("\t\tTrack Number\t\t: %ld\n", trackNumber);
|
||||||
|
printf("\t\tTrack Uid\t\t: %lld\n", trackUid);
|
||||||
|
|
||||||
if (pTrackName == NULL)
|
if (pTrackName == NULL)
|
||||||
printf("\t\tTrack Name\t\t: NULL\n");
|
printf("\t\tTrack Name\t\t: NULL\n");
|
||||||
@@ -235,8 +235,9 @@ int main(int argc, char* argv[])
|
|||||||
while ((pBlockEntry != NULL) && !pBlockEntry->EOS())
|
while ((pBlockEntry != NULL) && !pBlockEntry->EOS())
|
||||||
{
|
{
|
||||||
const Block* const pBlock = pBlockEntry->GetBlock();
|
const Block* const pBlock = pBlockEntry->GetBlock();
|
||||||
const unsigned long trackNum = pBlock->GetTrackNumber();
|
const long long trackNum = pBlock->GetTrackNumber();
|
||||||
const Track* const pTrack = pTracks->GetTrackByNumber(trackNum);
|
const unsigned long tn = static_cast<unsigned long>(trackNum);
|
||||||
|
const Track* const pTrack = pTracks->GetTrackByNumber(tn);
|
||||||
const long long trackType = pTrack->GetType();
|
const long long trackType = pTrack->GetType();
|
||||||
const int frameCount = pBlock->GetFrameCount();
|
const int frameCount = pBlock->GetFrameCount();
|
||||||
const long long time_ns = pBlock->GetTime(pCluster);
|
const long long time_ns = pBlock->GetTime(pCluster);
|
||||||
@@ -250,7 +251,7 @@ int main(int argc, char* argv[])
|
|||||||
{
|
{
|
||||||
const Block::Frame& theFrame = pBlock->GetFrame(i);
|
const Block::Frame& theFrame = pBlock->GetFrame(i);
|
||||||
const long size = theFrame.len;
|
const long size = theFrame.len;
|
||||||
const long offset = theFrame.pos;
|
const long long offset = theFrame.pos;
|
||||||
printf("\t\t\t %15ld,%15lx\n", size, offset);
|
printf("\t\t\t %15ld,%15lx\n", size, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user