Ejemplo n.º 1
0
SDIFresult SDIFmem_ReadFrame(FILE *f, SDIFmem_Frame *putithere)
{
    SDIFresult r;
    SDIF_FrameHeader fh;

    if ((r = SDIF_ReadFrameHeader(&fh, f))!=ESDIF_SUCCESS) {
      return r;
    }

    return SDIFmem_ReadFrameContents(&fh, f, putithere);
}
Ejemplo n.º 2
0
void do_scan(t_sdif_fileinfo *x, FILE *f, char *name) {
	SDIFresult r;
	SDIF_FrameHeader fh;
	int result, i, sawStreamAlready, needToSkip;
	char frameTypeBuffer[5];

	x->x_ns = 0;
		
	while ((r = SDIF_ReadFrameHeader(&fh, f)) == ESDIF_SUCCESS) {
		/* post("** Read frame header: ID %d, time %g, type %c%c%c%c", fh.streamID, fh.time,
			 fh.frameType[0], fh.frameType[1], fh.frameType[2], fh.frameType[3]); */
		
		needToSkip = 1;
		
		if (x->print_NVT_matrices) {
			if (SDIF_Char4Eq(fh.frameType, "1NVT")) {
				needToSkip = 0;  // Will read the matrices in this frame rather than skipping it	
				if (Read1NVTFrame(x, f, name, &fh) == 0) return;
			}

		}
		
		sawStreamAlready = 0;
		for (i = 0; i < x->x_ns; ++i) {
			if (x->x_streamID[i] == fh.streamID) {
				sawStreamAlready = 1;
				// Already saw this stream, so just make sure type is OK
				if (!SDIF_Char4Eq(fh.frameType, x->x_frameType[i])) {
					object_post((t_object *)x, "¥ streamlist: Warning: First frame for stream %ld", fh.streamID);
					post("¥ had type %c%c%c%c, but frame at time %g has type %c%c%c%c",
						 x->x_frameType[i][0], x->x_frameType[i][1],
						 x->x_frameType[i][2], x->x_frameType[i][3],
						 fh.time, fh.frameType[0], fh.frameType[1], fh.frameType[2],
						 fh.frameType[3]);
				}
				break;
			}
		}
				
		if (!sawStreamAlready) {
			if (x->x_ns >= MAX_STREAMS) {
				object_error((t_object *)x, NAME ": SDIF file has more than %ld streams!", MAX_STREAMS);
				return;
			}
			++(x->x_ns);
			x->x_streamID[i] = fh.streamID;
			SDIF_Copy4Bytes(x->x_frameType[i], fh.frameType);
			SDIF_Copy4Bytes(frameTypeBuffer, fh.frameType);
			frameTypeBuffer[4] = '\0';
			x->x_frameTypeSymbol[i] = gensym(frameTypeBuffer);
			x->x_starttime[i] = fh.time;
			x->x_numframes[i] = 0;
		}
		
		x->x_endtime[i] = fh.time;
		++(x->x_numframes[i]);

		if (needToSkip) {
			if (r = SDIF_SkipFrame(&fh, f)) {
				object_post((t_object *)x, NAME ": error skipping frame in SDIF file %s:", name);
				object_post((t_object *)x, "   %s", SDIF_GetErrorString(r));
				return;
			}
		}
	}
	
	if (r != ESDIF_END_OF_DATA) {
		object_post((t_object *)x, NAME ": error reading SDIF file %s:", name);
		object_post((t_object *)x, "%s", SDIF_GetErrorString(r));
	}

	outlet_bang(x->outlet2);
	
	return;
}