编码的MKV文件群集大小
MKV file cluster size which is encoded?
元素ID(也称为EBML ID(,以ID本身开头,然后是数据大小。
数据大小(以八位字节(为OCTER,也用UTF-8(例如系统(编码。
如何解码十进制中的数据大小
您可以在以下简单的示例代码中找到https://github.com/wangf1978/dumpts/blob/master/matroska.h
static uint64_t UnpackUnsignedIntVal(CBitstream&bs, uint8_t max_octs = 8, bool unPackVal=true, uint8_t* pcbValLen=nullptr)
{
uint8_t nLeadingZeros = 0;
uint64_t u64Val = bs.GetByte();
for (uint8_t i = 0; i < max_octs; i++)
if ((u64Val&(1ULL << (7 - i))) == 0)
nLeadingZeros++;
else
break;
if (nLeadingZeros >= max_octs) // Unexpected
return UINT64_MAX;
if (unPackVal)
u64Val &= ~(1 << (7 - nLeadingZeros));
for (uint8_t i = 0; i<nLeadingZeros; i++)
u64Val = (((uint64_t)u64Val) << 8) | (uint8_t)bs.GetBits(8);
if (pcbValLen != nullptr)
*pcbValLen = nLeadingZeros + 1;
return u64Val;
}
virtual int Unpack(CBitstream& bs)
{
// Read the element ID
uint64_t u64Val = UnpackUnsignedIntVal(bs, 4, false);
if (u64Val == UINT64_MAX)
return -1;
ID = (uint32_t)u64Val;
if ((u64Val = UnpackUnsignedIntVal(bs)) == UINT64_MAX)
return -1;
Size = u64Val;
//printf("ID: 0X%X, Size: %lld(0X%llX)n", ID, Size, Size);
return 0;
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 编码的MKV文件群集大小
- 训练后如何使用群集文件