Fix EBML input for live streams
This commit is contained in:
parent
a5bdaaaa5c
commit
9fd48f6e2f
1 changed files with 8 additions and 6 deletions
|
@ -143,14 +143,16 @@ namespace Mist{
|
||||||
ptr.truncate(0);
|
ptr.truncate(0);
|
||||||
readingMinimal = true;
|
readingMinimal = true;
|
||||||
uint32_t needed = EBML::Element::needBytes(ptr, ptr.size(), readingMinimal);
|
uint32_t needed = EBML::Element::needBytes(ptr, ptr.size(), readingMinimal);
|
||||||
while (ptr.size() < needed){
|
while (ptr.size() < needed && config->is_active){
|
||||||
if (!ptr.allocate(needed)){return false;}
|
if (!ptr.allocate(needed)){return false;}
|
||||||
int64_t toRead = needed - ptr.size();
|
int64_t toRead = needed - ptr.size();
|
||||||
int readResult = 0;
|
int readResult = 0;
|
||||||
while (!readResult){
|
while (!readResult){
|
||||||
readResult = fread(ptr + ptr.size(), toRead, 1, inFile);
|
readResult = fread(ptr + ptr.size(), toRead, 1, inFile);
|
||||||
if (!readResult){
|
if (!readResult){
|
||||||
if (errno == EINTR){continue;}
|
if (errno == EINTR){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// At EOF we don't print a warning
|
// At EOF we don't print a warning
|
||||||
if (!feof(inFile)){
|
if (!feof(inFile)){
|
||||||
FAIL_MSG("Could not read more data! (have %zu, need %" PRIu32 ")", ptr.size(), needed);
|
FAIL_MSG("Could not read more data! (have %zu, need %" PRIu32 ")", ptr.size(), needed);
|
||||||
|
@ -436,7 +438,7 @@ namespace Mist{
|
||||||
frameSize = assStr.size();
|
frameSize = assStr.size();
|
||||||
}
|
}
|
||||||
if (frameSize){
|
if (frameSize){
|
||||||
TP.add(newTime * timeScale, idx, frameSize, lastClusterBPos, B.isKeyframe() && !isAudio, isVideo);
|
TP.add(newTime * timeScale, tNum, frameSize, lastClusterBPos, B.isKeyframe() && !isAudio, isVideo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (TP.hasPackets()){
|
while (TP.hasPackets()){
|
||||||
|
@ -477,8 +479,9 @@ namespace Mist{
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputEBML::fillPacket(packetData &C){
|
void InputEBML::fillPacket(packetData &C){
|
||||||
|
thisIdx = M.trackIDToIndex(C.track, getpid());
|
||||||
if (swapEndianness.count(C.track)){
|
if (swapEndianness.count(C.track)){
|
||||||
switch (M.getSize(M.trackIDToIndex(C.track, getpid()))){
|
switch (M.getSize(thisIdx)){
|
||||||
case 16:{
|
case 16:{
|
||||||
char *ptr = C.ptr;
|
char *ptr = C.ptr;
|
||||||
uint32_t ptrSize = C.dsize;
|
uint32_t ptrSize = C.dsize;
|
||||||
|
@ -514,7 +517,6 @@ namespace Mist{
|
||||||
thisPacket.genericFill(C.time, C.offset, C.track, C.ptr, C.dsize,
|
thisPacket.genericFill(C.time, C.offset, C.track, C.ptr, C.dsize,
|
||||||
C.bpos, C.key);
|
C.bpos, C.key);
|
||||||
thisTime = C.time;
|
thisTime = C.time;
|
||||||
thisIdx = C.track;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputEBML::getNext(size_t idx){
|
void InputEBML::getNext(size_t idx){
|
||||||
|
@ -613,7 +615,7 @@ namespace Mist{
|
||||||
memcpy(ptr, assStr.data(), frameSize);
|
memcpy(ptr, assStr.data(), frameSize);
|
||||||
}
|
}
|
||||||
if (frameSize){
|
if (frameSize){
|
||||||
TP.add(newTime * timeScale, thisIdx, frameSize, lastClusterBPos,
|
TP.add(newTime * timeScale, tNum, frameSize, lastClusterBPos,
|
||||||
B.isKeyframe() && !isAudio, isVideo, (void *)ptr);
|
B.isKeyframe() && !isAudio, isVideo, (void *)ptr);
|
||||||
++bufferedPacks;
|
++bufferedPacks;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue