Ejemplo n.º 1
0
int main(int argc, const char *argv[]) {
    FILE *file;
    uint8 buffer[128];
    size_t size;
    ParseStatus status;

    if ( argc != 2 ) {
        fprintf(stderr, "Synopsis: %s <file>\n", argv[0]);
        exit(1);
    }

    file = fopen(argv[1], "rb");
    if ( file == NULL ) {
        fputs("File error\n", stderr);
        exit(2);
    }

    parseInit();
    while ( !feof(file) ) {
        size = fread(buffer, 1, 128, file);
        status = parse(buffer, size);
        if ( status != PARSE_SUCCESS ) {
            fprintf(stderr, "Parse error %d\n", status);
            exit(3);
        }
    }

    // terminate
    fclose(file);
    return 0;
}
Ejemplo n.º 2
0
bool CSeqParser::parseClassConstruct( char* &start, char *end, wd::CSeqLog &log, std::list< std::pair< char*, std::string > > &error_info )
{
    std::string str;

    gotoNextChar( start, end );

    for( char chr = *start; chr != '\0'; chr = *start )
    {
        switch ( chr )
        {
        case '}':
            ++start;
            return true;
        case '\r':
        case '\n':
        case ' ':
        case '\t':
            gotoNextChar( start, end );
            break;
        case '=':
            {
                CSeqInit data;
                data.eleName = str;

                str.clear();

                parseInit( ++start, end, data, error_info );

                if ( data.eleName.empty() )
                {
                    pushErrorInfo( error_info, start, "缺少变量名" );
                    break;
                }
                if ( data.eleDefault.empty() )
                {
                    pushErrorInfo( error_info, start, "变量缺少符值" );
                    break;
                }

                log.initList.push_back( data );
            }
            break;
        case ';':
            gotoNextLine( start, end );
            break;
        default:
            if ( !str.empty() )
                pushErrorInfo( error_info, start, ( "字符串 [" + str + "] 解释器未正确使用" ).c_str() );

            str = takeNextWord( start, end );
            break;
        }
    }

    return false;
}
  void OutProgressiveOGG::sendHeader(){
    HTTP_S.Clean(); //make sure no parts of old requests are left in any buffers
    HTTP_S.SetHeader("Content-Type", "video/ogg");
    HTTP_S.protocol = "HTTP/1.0";
    myConn.SendNow(HTTP_S.BuildResponse("200", "OK")); //no SetBody = unknown length - this is intentional, we will stream the entire file
    

    std::map<int, std::deque<std::string> > initData;

    OGG::oggSegment newSegment;
    for (std::set<long unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){
      parseInit(myMeta.tracks[*it].init,  initData[*it]);
      if (myMeta.tracks[*it].codec == "theora"){ //get size and position of init data for this page.
        pageBuffer[*it].codec = OGG::THEORA;
        pageBuffer[*it].totalFrames = 1; //starts at frame number 1, according to weird offDetectMeta function.
        std::string tempStr = initData[*it][0];
        theora::header tempHead((char *)tempStr.c_str(), 42);
        pageBuffer[*it].split = tempHead.getKFGShift();
        INFO_MSG("got theora KFG shift: %d", pageBuffer[*it].split); //looks OK.
      } else if (myMeta.tracks[*it].codec == "vorbis"){
        pageBuffer[*it].codec = OGG::VORBIS;
        pageBuffer[*it].totalFrames = 0;
        pageBuffer[*it].sampleRate = myMeta.tracks[*it].rate;
        pageBuffer[*it].prevBlockFlag = -1;
        vorbis::header tempHead((char *)initData[*it][0].data(), initData[*it][0].size());
        pageBuffer[*it].blockSize[0] = std::min(tempHead.getBlockSize0(), tempHead.getBlockSize1());
        pageBuffer[*it].blockSize[1] = std::max(tempHead.getBlockSize0(), tempHead.getBlockSize1());
        char audioChannels = tempHead.getAudioChannels(); //?
        vorbis::header tempHead2((char *)initData[*it][2].data(), initData[*it][2].size());        
        pageBuffer[*it].vorbisModes = tempHead2.readModeDeque(audioChannels);//getting modes
      } else if (myMeta.tracks[*it].codec == "opus"){
        pageBuffer[*it].totalFrames = 0; //?
        pageBuffer[*it].codec = OGG::OPUS;
      }
      pageBuffer[*it].clear(OGG::BeginOfStream, 0, *it, 0);   //CREATES a (map)pageBuffer object, *it = id, pagetype=BOS
      newSegment.dataString = initData[*it][0];
      pageBuffer[*it].oggSegments.push_back(newSegment);
      pageBuffer[*it].sendTo(myConn, 0); //granule position of 0
    }
    for (std::set<long unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){
      newSegment.dataString = initData[*it][1];
      pageBuffer[*it].oggSegments.push_back(newSegment);
      newSegment.dataString = initData[*it][2];
      pageBuffer[*it].oggSegments.push_back(newSegment);
      while (pageBuffer[*it].oggSegments.size()){
        pageBuffer[*it].sendTo(myConn, 0); //granule position of 0
      }
    }
    sentHeader = true;
  }
Ejemplo n.º 4
0
int CMuseDataFile::readFromFile(char *filename)
{
	FILE * file=fopen(filename,"rt");
	if(file==NULL){
		MUSEERROR(err_OpenInputFile,0,0);
		return -1;
	}
	if(parseInit()!=0){
		fclose(file);
		MUSEERROR(err_ParsingAbborted,0,0);
		return -1;
	} else {
		if(parseLoop(file)!=0){
			fclose(file);
			MUSEERROR(err_ParsingAbborted,0,0);
			return -1;
		}
	}
	fclose(file);
	MUSEERROR(err_ParsingCompleted,0,0);
	return 0;
}