Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » DirectX » DirectShow

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.12.2006, 13:21 Uhr
~Monchichi
Gast


Servus,

ich möchte einen Transformfilter in directShow schreiben, der aus den Daten, die über den Input Pin rein kommen, bestimmte Daten rausschmeißt.

Ich habe jetzt in einen TransInPlaceFilter in den Tranform Teil folgendes geschrieben:


HRESULT Transform (IMediaSample *pSample)

{

int *meinbuffer

pSample -> GetPointer (&meinbuffer);

int buffer [171]

while (*meinbuffer != 0x47)

{

meinbuffer ++;

}

for (int i; i<171; ++i)

buffer[i] == meinbuffer[i+17];

};



nun meine Frage, wie kommt der neue Buffer zum Outputpin? Die Einkommenden Daten sind ein kontinuierlicher Strom, wie kann ich den Vorgang immer wieder holen und die veränderten Daten in den OutPutPin schreiben?

Kann mir da jemand helfen? das wär super....bin schon ganz schön verzweifelt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.01.2007, 16:31 Uhr
~Klaus
Gast


Mit dem TranInPlaceFilter kannst du keine Kopie vom Inputsample erstellen, er besitzt nur einen buffer für In- und OutputPin zusammen. Es ist also nur möglich die Inputsamples zu modifizieren/verändern.

Benutz den CTransformFilter, mit dem kannst du auch Kopien vom Inputsample erstellen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.01.2007, 10:47 Uhr
~Monchichi
Gast


Hallo, danke für deine Antwort. Gibt es auch ein Beispiel für einen CTransformFilter so wie den NUllNull filter?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.01.2007, 13:06 Uhr
~Klaus
Gast


Such mal in der Microsoft Platform SDK Documentation nach "Writing Transform Filters". Ist zwar alles auf Englisch, sollte aber nicht das Problem sein.

Hier wird gut erklärt, wie du einen CTransformFilter schreibst.
Im Endeffekt sind es 5 Methoden, die du überschreiben musst.

Viel Erfolg.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.01.2007, 15:40 Uhr
~Monchichi
Gast


Vielen Dank für deine Hilfe. Könntest du bitte über folgenden Code mal drüber schaun ob man das dann so schreiben kann? Hab jetzt versucht den TransInPlacefilter den ich mir oben ausgedacht hab, als CTransformFilter zu schreiben.

HRESULT MyFilter::Transform (IMediaSample *pIn, IMediaSample *pOut)
BYTE *pSourceBuffer = 0;
BYTE *pDestBuffer = 0;

long lSourceSize = pIn -> GetActualDataLength();
long lDestSize = pOut -> GetActualDataLength();

pIn -> GetPointer (&pSourceBuffer);
pOut -> GetPointer (&pDestBuffer);

//Transformteil:

void DoTransform* (pSourceBuffer, pDestBuffer, lSourceSize);
{
while (*pSourceBuffer !=0x47)
{SourceBuffer ++i;}
for (int i=0; i<lSourceSize; ++i)
{
pDest[i] = pSource [i+17];
}
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ DirectX ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: