libwebm: added UnserializeInt function
Change-Id: I2298e547cd38d3aea04c0c993a67e5e291b8fea8
This commit is contained in:
parent
ffe5a8e548
commit
3395c36a8e
@ -345,6 +345,8 @@ double mkvparser::Unserialize8Double(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
signed char mkvparser::Unserialize1SInt(
|
signed char mkvparser::Unserialize1SInt(
|
||||||
IMkvReader* pReader,
|
IMkvReader* pReader,
|
||||||
long long pos)
|
long long pos)
|
||||||
@ -427,7 +429,49 @@ short mkvparser::Unserialize2SInt(
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
long mkvparser::UnserializeInt(
|
||||||
|
IMkvReader* pReader,
|
||||||
|
long long pos,
|
||||||
|
long size,
|
||||||
|
long long& result)
|
||||||
|
{
|
||||||
|
assert(pReader);
|
||||||
|
assert(pos >= 0);
|
||||||
|
assert(size > 0);
|
||||||
|
assert(size <= 8);
|
||||||
|
|
||||||
|
{
|
||||||
|
signed char b;
|
||||||
|
|
||||||
|
const long status = pReader->Read(pos, 1, (unsigned char*)&b);
|
||||||
|
|
||||||
|
if (status < 0)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
result = b;
|
||||||
|
|
||||||
|
++pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (long i = 1; i < size; ++i)
|
||||||
|
{
|
||||||
|
unsigned char b;
|
||||||
|
|
||||||
|
const long status = pReader->Read(pos, 1, &b);
|
||||||
|
|
||||||
|
if (status < 0)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
result <<= 8;
|
||||||
|
result |= b;
|
||||||
|
|
||||||
|
++pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; //success
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool mkvparser::Match(
|
bool mkvparser::Match(
|
||||||
IMkvReader* pReader,
|
IMkvReader* pReader,
|
||||||
@ -648,7 +692,7 @@ bool mkvparser::Match(
|
|||||||
|
|
||||||
long long total, available;
|
long long total, available;
|
||||||
|
|
||||||
const long status = pReader->Length(&total, &available);
|
long status = pReader->Length(&total, &available);
|
||||||
assert(status >= 0);
|
assert(status >= 0);
|
||||||
assert((total < 0) || (available <= total));
|
assert((total < 0) || (available <= total));
|
||||||
|
|
||||||
@ -662,19 +706,24 @@ bool mkvparser::Match(
|
|||||||
|
|
||||||
pos += len; //consume id
|
pos += len; //consume id
|
||||||
|
|
||||||
const long long size = ReadUInt(pReader, pos, len);
|
const long long size_ = ReadUInt(pReader, pos, len);
|
||||||
assert(size <= 2);
|
assert(size_ >= 1);
|
||||||
|
assert(size_ <= 2);
|
||||||
assert((pos + len) <= available);
|
assert((pos + len) <= available);
|
||||||
|
|
||||||
pos += len; //consume length of size of payload
|
pos += len; //consume length of size of payload
|
||||||
assert((pos + size) <= available);
|
assert((pos + size_) <= available);
|
||||||
|
|
||||||
//TODO:
|
const long size = static_cast<long>(size_);
|
||||||
// Generalize this to work for any size signed int
|
|
||||||
if (size == 1)
|
long long value;
|
||||||
val = Unserialize1SInt(pReader, pos);
|
|
||||||
else
|
status = UnserializeInt(pReader, pos, size, value);
|
||||||
val = Unserialize2SInt(pReader, pos);
|
assert(status == 0);
|
||||||
|
assert(value >= SHRT_MIN);
|
||||||
|
assert(value <= SHRT_MAX);
|
||||||
|
|
||||||
|
val = static_cast<short>(value);
|
||||||
|
|
||||||
pos += size; //consume size of payload
|
pos += size; //consume size of payload
|
||||||
|
|
||||||
@ -7894,12 +7943,25 @@ Block::Block(long long start, long long size_, IMkvReader* pReader) :
|
|||||||
pos += len; //consume track number
|
pos += len; //consume track number
|
||||||
assert((stop - pos) >= 2);
|
assert((stop - pos) >= 2);
|
||||||
|
|
||||||
|
long status;
|
||||||
|
|
||||||
|
#if 0
|
||||||
m_timecode = Unserialize2SInt(pReader, pos);
|
m_timecode = Unserialize2SInt(pReader, pos);
|
||||||
|
#else
|
||||||
|
long long value;
|
||||||
|
|
||||||
|
status = UnserializeInt(pReader, pos, 2, value);
|
||||||
|
assert(status == 0);
|
||||||
|
assert(value >= SHRT_MIN);
|
||||||
|
assert(value <= SHRT_MAX);
|
||||||
|
|
||||||
|
m_timecode = static_cast<short>(value);
|
||||||
|
#endif
|
||||||
|
|
||||||
pos += 2;
|
pos += 2;
|
||||||
assert((stop - pos) >= 1);
|
assert((stop - pos) >= 1);
|
||||||
|
|
||||||
long status = pReader->Read(pos, 1, &m_flags);
|
status = pReader->Read(pos, 1, &m_flags);
|
||||||
assert(status == 0);
|
assert(status == 0);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -33,8 +33,14 @@ long long SyncReadUInt(IMkvReader*, long long pos, long long stop, long&);
|
|||||||
long long UnserializeUInt(IMkvReader*, long long pos, long long size);
|
long long UnserializeUInt(IMkvReader*, long long pos, long long size);
|
||||||
float Unserialize4Float(IMkvReader*, long long);
|
float Unserialize4Float(IMkvReader*, long long);
|
||||||
double Unserialize8Double(IMkvReader*, long long);
|
double Unserialize8Double(IMkvReader*, long long);
|
||||||
|
|
||||||
|
#if 0
|
||||||
short Unserialize2SInt(IMkvReader*, long long);
|
short Unserialize2SInt(IMkvReader*, long long);
|
||||||
signed char Unserialize1SInt(IMkvReader*, long long);
|
signed char Unserialize1SInt(IMkvReader*, long long);
|
||||||
|
#else
|
||||||
|
long UnserializeInt(IMkvReader*, long long pos, long len, long long& result);
|
||||||
|
#endif
|
||||||
|
|
||||||
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&);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user