Beispiel #1
0
/*----------------------------------------------------------------------
|   AP4_LinearReader::EnableTrack
+---------------------------------------------------------------------*/
AP4_Result 
AP4_LinearReader::EnableTrack(AP4_UI32 track_id)
{
    // check if we don't already have this
    if (FindTracker(track_id)) return AP4_SUCCESS;

    // find the track in the movie
    AP4_Track* track = m_Movie.GetTrack(track_id);
    if (track == NULL) return AP4_ERROR_NO_SUCH_ITEM;
    
    // process this track
    return ProcessTrack(track);
}
Beispiel #2
0
//buf = HMP image, br = HMP image size, out_size = output MIDI image size
extern "C" void* load_hmp(BYTE* buf,DWORD br,DWORD* out_size)
{
	MIDIHEADER mhd = {1,0,0xC0};
	BYTE * max = buf+br;
	BYTE* ptr = buf;
	CWriteBuf* dst=wb_create();
	DWORD n1,n2;
	dst->writedword(_rv('MThd'));
	dst->writedword(_rv(6));
	dst->write(0,sizeof(mhd));
	ptr = buf+0x30;
	mhd.trax = *ptr;
	dst->write(hmp_track0,sizeof(hmp_track0));

	while(*(WORD*)ptr != 0x2FFF && ptr < max - 4-7) ptr++;
	ptr+=7;
	if (ptr == max-4) { dst->freebuf(); delete dst; return 0; }
	UINT n;

	for(n=1;n<mhd.trax;n++)
	{
		dst->writedword(_rv('MTrk'));
		n1 = *(DWORD*)ptr - 12;
		if (ptr + n1 > max) { dst->freebuf(); delete dst; return 0; }
		ptr += 8;
		
		UINT ts_ofs=dst->get_offs();
		dst->writedword(0);
		if (!(n2=ProcessTrack(ptr,dst,n1)))
			{ dst->freebuf(); delete dst; return 0; }
		
		dst->writedwordoffs(_rv(n2),ts_ofs);
		ptr += n1 + 4;
	}
	FixHeader(mhd);
	dst->writeoffs(&mhd,sizeof(mhd),8);


	UINT f_sz;
	BYTE* r=(BYTE*)dst->finish(&f_sz);
	delete dst;
	if (r)
	{
		if (out_size) *out_size=f_sz;
		return r;
	}
	else
	{
		return 0;
	}
}
Beispiel #3
0
void Service::FormTrack()
{
    cont->translate(HEADER_WDH, 0);
    ProcessTrack();
}