Кто-нибудь имел какие-либо проблемы с QuickTime PutMovieIntoTypedHandle в Windows 7 сбой периодически - PullRequest
1 голос
/ 14 июня 2011

Я недавно унаследовал кодовую базу, которая использует quicktime, я заметил, что при импорте ходов с использованием функции, приведенной ниже, она работает большую часть времени, но затем она иногда падает.Это странно, когда происходит сбой, потому что он работает 10 раз подряд, а затем после сбоя приложения.

Я использую winapi в C для своего приложения.IDE: Visual Studio 8 ОС: Windows 7 Quicktime-версия: Последняя

Это из Документов Quicktime API:

PutMovieIntoTypedHandle

Снимает фильм или одну дорожку изнутриэтот фильм и преобразует его в дескриптор указанного типа.

OSErr PutMovieIntoTypedHandle (Фильм theMovie, Track targetTrack, OSType handleType, дескриптор publicMovie, запуск TimeValue, TimeValue dur, длинные флаги, ComponentInstance userComp1) *;*

Код:

Track newTrack;
FSSpec audioFile;

Movie audioFileMovie;
Track audioFileTrack;
Media audioFileMedia;
TimeValue audioTrackDuration;
long trackCount;
short audioRefNum;
TimeScale audioTimeScale;
OSErr err;
SoundDescriptionHandle outDesc, inDesc;
ComponentInstance soundComp =0;
SndListResource * slr;
SoundHeader * sh;
Handle soundData = NewHandle(0);

long     i,sampleOffset,actualSamples, sampleCount;

//Create dataRef from audioFilePath
if((err = NativePathNameToFSSpec(audioFilePath, &audioFile, kErrorIfFileNotFound)) != noErr) {
    if(err != fnfErr) {
        printf("NativePathNameToFSSpec failed. Error: %d\n", err);
        return 0;
    }
}

if(noErr != OpenMovieFile(&audioFile, &audioRefNum, fsRdPerm)){
    fprintf(stderr, "Couldn't open movie file\n");
    return 0;
}
NewMovieFromFile(&audioFileMovie, audioRefNum, NULL, (StringPtr)NULL, newMovieActive, NULL);
if (audioRefNum != 0)
    CloseMovieFile(audioRefNum);

//see how many tracks there are in the audioFileMovie
trackCount = GetMovieTrackCount(audioFileMovie);

//Obtain audio track from audio movie
audioFileTrack = GetMovieIndTrack(audioFileMovie, 1);

//Obtain audio media from audioFileTrack so that we can figure out how long it is
audioFileMedia = GetTrackMedia(audioFileTrack);
audioTrackDuration = GetMediaDuration(audioFileMedia);
audioTimeScale = GetMediaTimeScale(audioFileMedia);

soundComp = OpenDefaultComponent('spit', 'snd ');
if(!soundComp)
{
    return 1;
}


inDesc=(SoundDescriptionHandle)NewHandle(0);
outDesc=nil;

GetMediaSampleDescription(GetTrackMedia(audioFileTrack),1,(SampleDescriptionHandle)inDesc);

outDesc = (SoundDescriptionHandle) NewHandleClear(sizeof(SoundDescription));
if(!outDesc)
{

    CloseComponent(soundComp);
    return 1;
}

outDesc[0]->descSize = sizeof(SoundDescription);
outDesc[0]->dataFormat = k8BitOffsetBinaryFormat;
outDesc[0]->numChannels = 1;
outDesc[0]->sampleSize = 8;
outDesc[0]->sampleRate = inDesc[0]->sampleRate;

MovieExportSetSampleDescription(soundComp, (SampleDescriptionHandle)outDesc, 'soun');
DisposeHandle((Handle)inDesc);
DisposeHandle((Handle)outDesc);

if( audioFileMovie && soundData && soundComp )
{
    MessageBox(NULL, "Entering \"PutMovieIntoTypedHandle\".\n", "Checkpoint" ,MB_OK);
    OSErr result = PutMovieIntoTypedHandle(audioFileMovie,0, 'snd ', soundData, 0, // frameTime,
                            GetMovieDuration(audioFileMovie), 0, soundComp);
    MessageBox(NULL, "Made it passed \"PutMovieIntoTypedHandle\".\n", "Checkpoint" ,MB_OK);
}
else
{
    return 1;
}
...