From 03d4d58cbed695629b3bf519b2786781a4536d63 Mon Sep 17 00:00:00 2001 From: Oswald de Bruin Date: Wed, 12 Jun 2013 14:53:41 +0200 Subject: [PATCH] Ogg fixing --- src/analysers/ogg_analyser.cpp | 16 +++++----- src/converters/ogg2dtsc.cpp | 54 ++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/analysers/ogg_analyser.cpp b/src/analysers/ogg_analyser.cpp index 511b32e1..eb0d04d0 100644 --- a/src/analysers/ogg_analyser.cpp +++ b/src/analysers/ogg_analyser.cpp @@ -9,15 +9,17 @@ namespace Analysers{ int analyseOGG(){ std::string oggBuffer; + OGG::Page oggPage; //Read all of std::cin to oggBuffer + //while stream busy while (std::cin.good()){ - oggBuffer += std::cin.get(); - } - oggBuffer.erase(oggBuffer.size() - 1, 1); - - OGG::Page oggData; - while (oggData.read(oggBuffer)){ - std::cerr << oggData.toPrettyString() << std::endl; + for (unsigned int i = 0; (i < 1024) && (std::cin.good()); i++){ + oggBuffer += std::cin.get(); + } + //while OGG::page check function read + while (oggPage.read(oggBuffer)){//reading ogg to string + std::cout << oggPage.toPrettyString() << std::endl; + } } return 0; } diff --git a/src/converters/ogg2dtsc.cpp b/src/converters/ogg2dtsc.cpp index f9b9d00c..e6b300e2 100644 --- a/src/converters/ogg2dtsc.cpp +++ b/src/converters/ogg2dtsc.cpp @@ -3,12 +3,20 @@ #include #include #include +#include #include #include #include #include namespace Converters{ + struct oggTrack{ + long unsigned int serialNumber; //serial number in read OGG file + long unsigned int lastSequenceNumber;//error checking for lost pages in OGG + long long int dtscID; //track ID for in the written DTSC file + DTSC::datatype type; //type of stream in DTSC + }; + int OGG2DTSC(){ std::string oggBuffer; OGG::Page oggPage; @@ -16,15 +24,51 @@ namespace Converters{ //Read all of std::cin to oggBuffer //while stream busy + JSON::Value DTSCOut; + std::vector trackData; + long long int lastTrackID = 1; while (std::cin.good()){ - for (unsigned int i; (i < 1024) && (std::cin.good()); i++){ + for (unsigned int i = 0; (i < 1024) && (std::cin.good()); i++){ oggBuffer += std::cin.get(); } //while OGG::page check functie{ read - while (oggPage.read(oggBuffer)){//reading ogg to string - //ogg page 2 DTSC packet - std::cout << oggPage.typeBOS(); - std::cout << "inner" << std::endl; + while (oggPage.read(oggBuffer)){//reading ogg to ogg::page + //on succes, we handle one page + if (oggPage.typeBOS()){//defines a new track + //std::cout << oggPage.getFullPayload() << std::endl; + oggTrack temp; + temp.serialNumber = oggPage.getBitstreamSerialNumber(); + std::cerr << "Begin "<< temp.serialNumber << std::endl; + temp.lastSequenceNumber = oggPage.getPageSequenceNumber(); + temp.dtscID = lastTrackID; + lastTrackID++; + if (memcmp(oggPage.getFullPayload()+1, "theora", 6)){ + temp.type = DTSC::VIDEO; + std::cerr << "Snr " << temp.serialNumber << "=theora" << std::endl; + }else if(memcmp(oggPage.getFullPayload()+2, "vorbis", 6)){ + std::cerr << "Snr " << temp.serialNumber << "=vorbis" << std::endl; + temp.type = DTSC::AUDIO; + }else{ + std::cerr << "Unknown Codec!" << std::endl; + } + trackData.insert(trackData.end(), temp); + }else if (oggPage.typeEOS()){//ending page + std::cerr << std::hex << oggPage.getGranulePosition() <