From ae17368228e81de8e79c400a3ddeea6d3ec8dc06 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Fri, 29 Nov 2013 14:28:15 +0100 Subject: [PATCH] Final fix for the DTSC::isFixed function --- lib/dtsc.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp index 33948afd..922aef39 100644 --- a/lib/dtsc.cpp +++ b/lib/dtsc.cpp @@ -968,6 +968,27 @@ DTSC::File::~File(){ bool DTSC::isFixed(JSON::Value & metadata){ - DTSC::Meta testFixed(metadata); - return testFixed.isFixed(); + if (metadata.isMember("is_fixed")){return true;} + if ( !metadata.isMember("tracks")){return false;} + for (JSON::ObjIter it = metadata["tracks"].ObjBegin(); it != metadata["tracks"].ObjEnd(); it++){ + if (it->second["type"].asString() == "meta"){ + continue; + } + if (!it->second["keys"].isString()){ + std::cerr << "Not fixed because keys for track " << it->second["trackid"].asInt() << " is not a string" << std::endl; + return false; + } + //Check for bpos: last element bpos != 0 + std::string keyRef = it->second["keys"].asStringRef(); + if (keyRef.size() < 16){ + std::cerr << "No keys in track " << it->second["trackid"].asInt() << std::endl; + return false; + } + int offset = keyRef.size() - 17; + if (!(keyRef[offset] | keyRef[offset+1] | keyRef[offset+2] | keyRef[offset+3] | keyRef[offset+4])){ + std::cerr << "Not fixed because last bpos for track " << it->second["trackid"].asInt() << " it 0" << std::endl; + return false; + } + } + return true; }