Some fixes for metadata rewriting in DTSC::File, optimized live fragmenter somewhat.
This commit is contained in:
parent
bf69dacefd
commit
4a79862111
2 changed files with 11 additions and 20 deletions
29
lib/dtsc.cpp
29
lib/dtsc.cpp
|
@ -323,26 +323,7 @@ void DTSC::Stream::updateHeaders(){
|
||||||
metadata["keylen"].append(buffers[keyframes[0].b]["time"].asInt() - buffers[keyframes[1].b]["time"].asInt());
|
metadata["keylen"].append(buffers[keyframes[0].b]["time"].asInt() - buffers[keyframes[1].b]["time"].asInt());
|
||||||
long long int firstFragNo = -1;
|
long long int firstFragNo = -1;
|
||||||
metadata["frags"].null();
|
metadata["frags"].null();
|
||||||
long long int currFrag = metadata["keytime"][0u].asInt() / 10000;
|
long long int currFrag = -1;
|
||||||
if (currFrag == 0){
|
|
||||||
long long int fragLen = 1;
|
|
||||||
long long int fragDur = metadata["keylen"][0u].asInt();
|
|
||||||
for (unsigned int j = 1; j < metadata["keytime"].size(); j++){
|
|
||||||
if (metadata["keytime"][j].asInt() / 10000 > currFrag){
|
|
||||||
if (firstFragNo == -1){
|
|
||||||
firstFragNo = currFrag;
|
|
||||||
}
|
|
||||||
JSON::Value thisFrag;
|
|
||||||
thisFrag["num"] = metadata["keynum"][0u];
|
|
||||||
thisFrag["len"] = fragLen;
|
|
||||||
thisFrag["dur"] = fragDur;
|
|
||||||
metadata["frags"].append(thisFrag);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fragLen++;
|
|
||||||
fragDur += metadata["keylen"][j].asInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (unsigned int i = 1; i < metadata["keytime"].size(); i++){
|
for (unsigned int i = 1; i < metadata["keytime"].size(); i++){
|
||||||
if (metadata["keytime"][i].asInt() / 10000 > currFrag){
|
if (metadata["keytime"][i].asInt() / 10000 > currFrag){
|
||||||
currFrag = metadata["keytime"][i].asInt() / 10000;
|
currFrag = metadata["keytime"][i].asInt() / 10000;
|
||||||
|
@ -491,6 +472,11 @@ JSON::Value & DTSC::File::getMeta(){
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the header metadata for this file as JSON::Value.
|
||||||
|
JSON::Value & DTSC::File::getFirstMeta(){
|
||||||
|
return firstmetadata;
|
||||||
|
}
|
||||||
|
|
||||||
/// (Re)writes the given string to the header area if the size is the same as the existing header.
|
/// (Re)writes the given string to the header area if the size is the same as the existing header.
|
||||||
/// Forces a write if force is set to true.
|
/// Forces a write if force is set to true.
|
||||||
bool DTSC::File::writeHeader(std::string & header, bool force){
|
bool DTSC::File::writeHeader(std::string & header, bool force){
|
||||||
|
@ -565,6 +551,9 @@ void DTSC::File::readHeader(int pos){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
metadata = JSON::fromDTMI(strbuffer);
|
metadata = JSON::fromDTMI(strbuffer);
|
||||||
|
if (pos == 0){
|
||||||
|
firstmetadata = metadata;
|
||||||
|
}
|
||||||
//if there is another header, read it and replace metadata with that one.
|
//if there is another header, read it and replace metadata with that one.
|
||||||
if (metadata.isMember("moreheader") && metadata["moreheader"].asInt() > 0){
|
if (metadata.isMember("moreheader") && metadata["moreheader"].asInt() > 0){
|
||||||
readHeader(metadata["moreheader"].asInt());
|
readHeader(metadata["moreheader"].asInt());
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace DTSC {
|
||||||
File(std::string filename, bool create = false);
|
File(std::string filename, bool create = false);
|
||||||
~File();
|
~File();
|
||||||
JSON::Value & getMeta();
|
JSON::Value & getMeta();
|
||||||
|
JSON::Value & getFirstMeta();
|
||||||
long long int getLastReadPos();
|
long long int getLastReadPos();
|
||||||
bool writeHeader(std::string & header, bool force = false);
|
bool writeHeader(std::string & header, bool force = false);
|
||||||
long long int addHeader(std::string & header);
|
long long int addHeader(std::string & header);
|
||||||
|
@ -82,6 +83,7 @@ namespace DTSC {
|
||||||
std::string strbuffer;
|
std::string strbuffer;
|
||||||
JSON::Value jsonbuffer;
|
JSON::Value jsonbuffer;
|
||||||
JSON::Value metadata;
|
JSON::Value metadata;
|
||||||
|
JSON::Value firstmetadata;
|
||||||
std::map<int, long> frames;
|
std::map<int, long> frames;
|
||||||
std::map<int, long> msframes;
|
std::map<int, long> msframes;
|
||||||
long long int currtime;
|
long long int currtime;
|
||||||
|
|
Loading…
Add table
Reference in a new issue