Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

1

01.07.2005, 08:45

Probleme mit tbVideo

Hallo alle zusammen.
Ich habe Probleme mit der Video Klasse aus der Engine.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Render

                if(m_bVideo)
    {
        //tbWriteToLog("CGame::Render m_bVideo");

    //  tbWriteToLog("Das Video hat angefangen zu spielen!");

        
            D3D.SetTexture(0, m_pVideo->GetRenderer()->GetTexture());
        D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, bVertex, sizeof(STitleVertex));
    }
...
        D3D->EndScene();
            if(m_bVideo)
            {
                m_pVideo->NextFrame();
            //  m_pVideo->Process();

            }

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//VideoLoad

    tbWriteToLog("DateiName des Videos: %s",g_pSchar1->m_aVideo[iVideo].cDateiName);
    sprintf(acFilename, "Videos\\%s", g_pSchar1->m_aVideo[iVideo].cDateiName);
        if(!acFilename)
        {
            TB_ERROR("acFilename = 0, DateiName exestiert nicht!", TB_ERROR);
        }
//      tbWriteToLog("Video: %s soll geladen werden!", acFilename);

        
        if(BildLoad(g_pSchar1->m_aVideo[iVideo].iTargetBild))
        {
            TB_ERROR("BildLoad konnte nicht komplett ausgeführt werden", TB_ERROR);
        }

            m_pVideo = new tbVideo;
            if(m_pVideo->Init(acFilename, false))
            {
                TB_ERROR("Video konnte nicht geladen werden!", TB_ERROR);
            }
            tbWriteToLog("m_pVideo initalisiert!");
    
//  tbWriteToLog("BildLoad ausgeführt!");

    m_bVideo = true;
if(m_pVideo->Play(FALSE))
{
    TB_ERROR("Play vom Video fehlgeschlagen!", TB_ERROR);
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//Move

    if(bZeit && m_bVideo)
    if (Zeit >= g_pSchar1->m_aVideo[m_iVideo].iSekunden)
    {
        m_pVideo->Stop();
        tbWriteToLog("nach Video Stop");
        Zeit = 0;
        m_bVideo = false;
        bZeit = false;
        m_bWork = false;
    }

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 //BildLoad

    m_pBildFile = new tbVFile;
    char acFilename[256];
    if(m_iZimmer == 1)
    {   
        sprintf(acFilename, "%s@Bad.zip#Tazi", g_pSchar1->m_aBilder[iBild].cDateiName);
        tbWriteToLog("Bild: %s soll geladen werden!", acFilename);

    }
    if(m_iZimmer == 2)
    {
        sprintf(acFilename, "%s@Flur.zip#Tazi", g_pSchar1->m_aBilder[iBild].cDateiName);
        tbWriteToLog("Bild: %s soll geladen werden!", acFilename);
    
    }

    if(m_iZimmer == 3)
    {
        sprintf(acFilename, "%s@Wohn.zip#Tazi", g_pSchar1->m_aBilder[iBild].cDateiName);
        tbWriteToLog("Bild: %s soll geladen werden!", acFilename);

    }
    if(m_pBildFile->Init(acFilename))
    {
        TB_ERROR("Bild kann nicht aus Bad.zip geladen werden!", TB_ERROR);
    }

    if(!m_pBildTex2)
    {
        tbTextureManager::Instance().ReleaseTexture(m_pBildTex);
        TB_SAFE_DELETE(m_pBildTex);
        m_pBildTex2 = tbTextureManager::Instance().LoadTexture(m_pBildFile);
        if(!m_pBildTex2) TB_ERROR("Fehler beim Laden des Bildes!", TB_ERROR);
    }

    if(!m_pBildTex)
    {
        tbTextureManager::Instance().ReleaseTexture(m_pBildTex2);
        TB_SAFE_DELETE(m_pBildTex2);
        m_pBildTex = tbTextureManager::Instance().LoadTexture(m_pBildFile);
        if(!m_pBildTex) TB_ERROR("Fehler beim Laden des Bildes!", TB_ERROR);
    }


    TB_SAFE_DELETE(m_pBildFile);



So ungefähr werden die Videos bei mir aufegrufen.
Damit das Video aufhört zu spielen, habe ich einen Zeitzähler eingebaut, der die Sekunden zählt und dann Stop aufruft. Ich wollte es erst mit der IsPlaying() Funktion machen, aber die liefert immer false zurück. Looping habe ich nicht eingeschaltet. In meinem Spiel werden häufig und schnell hintereinander neue Videos geladen, immer mit m_pVideo. Und mein Problem ist, das das Programm andauernd abstürzt.:

(Link)


Das komische ist, das es immer unterschiedlich abstürzt. Mal gleich beim zweiten Film. Und manchmal erst nach 5 oder 6 Filmen.
In der Log steht immer als letztes der Name des zu Ladenen Bildes.Also VideoLoad ruft BildLoad auf das funktioniert auch, aber nach dem BildLoad geendet hat, stürzt das Programm ab.

Hat jemand eine Idee, was ich anders machen könnte, damit es nicht mehr abstürzt?
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

01.07.2005, 20:26

Riecht stark nach Pufferüberlauf.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

01.07.2005, 20:28

Es gab a schonmal probs mit der Videoschnittstelle, schu mal im Form, danke. Vielleicht hilft dir das weiter.

[Edit]
https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=3388&start=0
[/Edit]

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

01.07.2005, 20:50

koschka
Ja doch da war der Threadersteller zu dem Entschluss gekommen auf diese Klasse zu "pfeifen" und lieber DirectDraw für die Videoausgabe zu benutzen. Was ich persönlich auch vorziehen würde! Direct3D ist dafür einfach nicht gedacht um Videos auszugeben, das haben selbst die von Bilizzard bei Warcraft 3 geschnallt. Ist sowieso schneller, man hat weniger Probleme und es ist ordentlicher.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

01.07.2005, 20:53

ja kann sein, aber vielleicht kommt der Threadersteller ja zu der gleichen Erkenntnis. :huhu:

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

01.07.2005, 20:59

koschka
Wollen wir es hoffen. Ich mein im BUch stand glaub ich mal was von "Videos für Explosionen"? Na ja, prost mahlzeit sag ich da nur wenn jemand das vor hat...

Am Besten ist jedoch immer noch eines: Eigenes Videoformat schreiben, auf DirectShow pfeifen und dieses VideoFormat dann mit DirectDraw in der Version 1 bzw. 3(!!!) ausgeben lassen, diese Version ist meiner bescheidenen und trivialen Meinung nach die Beste (ebenfalls in den Tests von mir).

Keine Kompatibilitätsprobleme, Ausreichend schnell für ein Video, Scanlines, einfach, keine sinnlosen verbuggten Codecs auf die man mit DirectShow zugreifen müsste usw. Kurz: Perfekt

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

01.07.2005, 21:05

Hmm, mit Qnis für Explosionen hab ich micht noch gar nicht so beschäftigt. Aber ich würde mal denken das nicht jeder sich so schnell mal ein eigenes Format schreiben kann, deswegen ist Davids Variant schon nciht so schlecht.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

01.07.2005, 21:09

Aber doch keine Videos? Das nennt man in der Fachsprache auch: Overhead.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

01.07.2005, 21:56

Auf deutsch: Zsatzaufwand ;)

Ja das mit den Videos ist natürlich nicht so super gelöst, besonders weils da ja nur Probleme gibt

Werbeanzeige