Ogg fixed

This commit is contained in:
Oswald Auguste de Bruin 2013-08-29 13:10:22 +02:00 committed by Thulinma
parent 31bfc8223e
commit 632b3ff594
2 changed files with 30 additions and 12 deletions

View file

@ -188,6 +188,9 @@ namespace OGG{
temp = 0; temp = 0;
} }
} }
if (temp!=0){
segmentTableDeque.push_back(temp);
}
} }
return segmentTableDeque; return segmentTableDeque;
} }
@ -196,6 +199,7 @@ namespace OGG{
std::cerr << "Segments too big, create a continue page" << std::endl; std::cerr << "Segments too big, create a continue page" << std::endl;
} }
///\TODO MAKE FIX HERE
bool Page::setSegmentTable(std::vector<unsigned int> layout){ bool Page::setSegmentTable(std::vector<unsigned int> layout){
dataSum=0; dataSum=0;
for (unsigned int i = 0; i < layout.size(); i++){ for (unsigned int i = 0; i < layout.size(); i++){
@ -205,7 +209,7 @@ namespace OGG{
char table[255]; char table[255];
for (unsigned int i = 0; i < layout.size(); i++){ for (unsigned int i = 0; i < layout.size(); i++){
while (layout[i]>=255){ while (layout[i]>=255){
if (place >= 255){ if (place > 255){
STerrMSG(); STerrMSG();
return false; return false;
} }
@ -213,12 +217,14 @@ namespace OGG{
layout[i] -= 255; layout[i] -= 255;
place++; place++;
} }
if (place >= 255){ if (place > 255){
STerrMSG(); STerrMSG();
return false; return false;
} }
table[place] = layout[i]; if (layout[i] != 0){
place++; table[place] = layout[i];
place++;
}
} }
setPageSegments(place); setPageSegments(place);
setSegmentTable(table,place); setSegmentTable(table,place);

View file

@ -66,7 +66,7 @@ namespace vorbis{
char header::getBlockSize0(){ char header::getBlockSize0(){
if (getHeaderType() == 1){ if (getHeaderType() == 1){
return data[28]>>4; return (data[28]>>4) & 0x0F;
}else{ }else{
return 0; return 0;
} }
@ -106,12 +106,24 @@ namespace vorbis{
bool header::validate(){ bool header::validate(){
switch(getHeaderType()){ switch(getHeaderType()){
case 1://ID header case 1://ID header
if (datasize!=30) return false; if (datasize!=30){
if (getVorbisVersion()!=0) return false; return false;
if (getAudioChannels()<=0) return false; }
if (getAudioSampleRate()<=0) return false; if (getVorbisVersion()!=0){
if (getBlockSize0()>getBlockSize1()) return false; return false;
if (getFramingFlag()!=1) return false; }
if (getAudioChannels()<=0){
return false;
};
if (getAudioSampleRate()<=0) {
return false;
}
if (getBlockSize0()>getBlockSize1()){
return false;
};
if (getFramingFlag()!=1){
return false;
};
break; break;
case 3://comment header case 3://comment header
break; break;
@ -140,7 +152,7 @@ namespace vorbis{
}else{ }else{
return false; return false;
} }
return validate(); return true;
} }