AVI-File mit DirectX abspielen



  • Hi

    Ich möchte ein AVI-File mit Hilfe von DirectX abspielen. Dies wäre kein so grosses Problem, da es viele Beispiele gibt... Mein Problem ist es jedoch, dass ich das AVI-File in einer Fullscreen-Anwendung abspielen möchte und mit einer grösse von 350x200pix... (Anwendungsfenster=800x600) Dazu habe ich noch kein Beispiel gefunden.... Kann mir jemand helfen, wie ich dies machen kann???

    Vielen Dank für die Hilfe!



  • Konkretisiert dich mal, was genau du für eine DX Version benutzt und zeig am besten, welchen Code bis jetzt hast zum abspielen.



  • Ich benutze bis jetzt DirectX9

    Hier der Quellcode, welche ich verwenden möchte:

    HRESULT PlayMovieInWindow(LPTSTR szFile)
    {
        USES_CONVERSION;
        WCHAR wFile[MAX_PATH];
        HRESULT hr;
    
        // Check input string
        if (szFile == NULL)
            return E_POINTER;
    
        // Clear open dialog remnants before calling RenderFile()
        UpdateWindow(ghApp);
    
        // Convert filename to wide character string
        wcsncpy(wFile, T2W(szFile), NUMELMS(wFile)-1);
        wFile[MAX_PATH-1] = 0;
    
        // Get the interface for DirectShow's GraphBuilder
        JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                             IID_IGraphBuilder, (void **)&pGB));
    
        if(SUCCEEDED(hr))
        {
            // Create the Video Mixing Renderer and add it to the graph
            JIF(InitializeWindowlessVMR());
    
            // Have the graph builder construct its the appropriate graph automatically
            JIF(pGB->RenderFile(wFile, NULL));
    
            // QueryInterface for DirectShow interfaces
            JIF(pGB->QueryInterface(IID_IMediaControl, (void **)&pMC));
            JIF(pGB->QueryInterface(IID_IMediaEventEx, (void **)&pME));
            JIF(pGB->QueryInterface(IID_IMediaSeeking, (void **)&pMS));
            JIF(pGB->QueryInterface(IID_IMediaPosition, (void **)&pMP));
            JIF(pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA));
    
            // Is this an audio-only file (no video component)?
            CheckVisibility();
    
            // Have the graph signal event via window callbacks for performance
            JIF(pME->SetNotifyWindow((OAHWND)ghApp, WM_GRAPHNOTIFY, 0));
    
            if (!g_bAudioOnly)
            {
                JIF(InitVideoWindow(1, 1));
                GetFrameStepInterface();
            }
            else
            {
                JIF(InitPlayerWindow());
                EnablePlaybackMenu(TRUE, AUDIO);
            }
    
            // Complete initialization
            CheckSizeMenu(ID_FILE_SIZE_NORMAL);
            ShowWindow(ghApp, SW_SHOWNORMAL);
            UpdateWindow(ghApp);
            SetForegroundWindow(ghApp);
            SetFocus(ghApp);
    
            g_PlaybackRate = 1.0;
            UpdateMainTitle();
    
    #ifdef REGISTER_FILTERGRAPH
            hr = AddGraphToRot(pGB, &g_dwGraphRegister);
            if (FAILED(hr))
            {
                Msg(TEXT("Failed to register filter graph with ROT!  hr=0x%x"), hr);
                g_dwGraphRegister = 0;
            }
    #endif
    
            // Run the graph to play the media file
            JIF(pMC->Run());
            g_psCurrent=Running;
    
            SetFocus(ghApp);
        }
    
        return hr;
    }
    

    Das Beispiel habe ich aus den Samples von DirectX9 (Windowless)
    Leider habe ich auch keine Ahnung, wo ich das Fenster übergeben kann und wie schon vorher erwähnt, wo ich die grösse der Anzeige festlegen kann.

    Bitte helft mir weiter, denn ich habe eigentlich gar keine Ahnung von DirectX....



  • Das mit Fullscreen war in der Tat doof dokumentiert IIRC.
    Wenn ich meinen Schach-Source finde, schau' ich da noch mal...



  • Wäre dir echt dankbar....



  • addict schrieb:

    Wäre dir echt dankbar....

    Hab' ihn bislang net gefunden. Hätte auch noch einige CDs vor mir.

    Ich hatte diesbzgl. vor Jahren mal in den MSDN Newsgroups gepostet. Bekam auch prompt Hilfe von 'nem MS-Typ. Solltest Du auch mal einfach machen.
    Andererseits sollte das mittlerweile doch mal dokumentiert sein! 😡


Anmelden zum Antworten