fixed the issue 234

Change-Id: Ie527263ae2862426e8c58fce13b34da4c792cc01
This commit is contained in:
Hwasoo Lee
2010-11-16 14:54:14 -05:00
parent 790f639f2f
commit d97f236f81
3 changed files with 44 additions and 16 deletions

View File

@@ -19,7 +19,6 @@ mkvparser::IMkvReader::~IMkvReader()
{
}
void mkvparser::GetVersion(int& major, int& minor, int& build, int& revision)
{
major = 1;
@@ -28,7 +27,6 @@ void mkvparser::GetVersion(int& major, int& minor, int& build, int& revision)
revision = 7;
}
long long mkvparser::ReadUInt(IMkvReader* pReader, long long pos, long& len)
{
assert(pReader);
@@ -235,6 +233,7 @@ long long mkvparser::UnserializeUInt(
if (hr < 0)
return hr;
result <<= 8;
result |= b;
@@ -366,7 +365,6 @@ bool mkvparser::Match(
long long& pos,
unsigned long id_,
long long& val)
{
assert(pReader);
assert(pos >= 0);
@@ -2984,13 +2982,12 @@ Track::~Track()
Track::Info::Info():
type(-1),
number(-1),
uid(-1),
uid(ULLONG_MAX),
nameAsUTF8(NULL),
codecId(NULL),
codecPrivate(NULL),
codecPrivateSize(0),
codecNameAsUTF8(NULL)
//lacing(false)
{
}
@@ -3027,6 +3024,11 @@ long long Track::GetNumber() const
return m_info.number;
}
unsigned long long Track::GetUid() const
{
return m_info.uid;
}
const char* Track::GetNameAsUTF8() const
{
return m_info.nameAsUTF8;
@@ -3530,8 +3532,8 @@ void Tracks::ParseTrackEntry(
#endif
if (Match(pReader, pos, 0x57, i.number))
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, 0x136E, i.nameAsUTF8))
@@ -3552,6 +3554,9 @@ void Tracks::ParseTrackEntry(
{
long len;
const long long idpos = pos;
idpos;
const long long id = ReadUInt(pReader, pos, len);
assert(id >= 0); //TODO: handle error case
assert((pos + len) <= stop);
@@ -3578,6 +3583,27 @@ void Tracks::ParseTrackEntry(
audioSettings.start = start;
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_;
}
}
}
}

View File

@@ -209,6 +209,7 @@ public:
long long GetType() const;
long long GetNumber() const;
unsigned long long GetUid() const;
const char* GetNameAsUTF8() const;
const char* GetCodecNameAsUTF8() const;
const char* GetCodecId() const;
@@ -227,7 +228,7 @@ public:
{
long long type;
long long number;
long long uid;
unsigned long long uid;
char* nameAsUTF8;
char* codecId;
unsigned char* codecPrivate;

View File

@@ -148,14 +148,14 @@ int main(int argc, char* argv[])
if (pTrack == NULL)
continue;
const long long trackType_ = pTrack->GetType();
unsigned long trackType = static_cast<unsigned long>(trackType_);
unsigned long trackNumber = pTrack->GetNumber();
const long long trackType = pTrack->GetType();
const long long trackNumber = pTrack->GetNumber();
const unsigned long long trackUid = pTrack->GetUid();
const wchar_t* const pTrackName = utf8towcs(pTrack->GetNameAsUTF8());
printf("\t\tTrack Type\t\t: %ld\n", trackType);
printf("\t\tTrack Number\t\t: %ld\n", trackNumber);
printf("\t\tTrack Uid\t\t: %lld\n", trackUid);
if (pTrackName == NULL)
printf("\t\tTrack Name\t\t: NULL\n");
@@ -235,8 +235,9 @@ int main(int argc, char* argv[])
while ((pBlockEntry != NULL) && !pBlockEntry->EOS())
{
const Block* const pBlock = pBlockEntry->GetBlock();
const unsigned long trackNum = pBlock->GetTrackNumber();
const Track* const pTrack = pTracks->GetTrackByNumber(trackNum);
const long long trackNum = pBlock->GetTrackNumber();
const unsigned long tn = static_cast<unsigned long>(trackNum);
const Track* const pTrack = pTracks->GetTrackByNumber(tn);
const long long trackType = pTrack->GetType();
const int frameCount = pBlock->GetFrameCount();
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 long size = theFrame.len;
const long offset = theFrame.pos;
const long long offset = theFrame.pos;
printf("\t\t\t %15ld,%15lx\n", size, offset);
}