Hallo,
ich bastel gerade einen DirectShow-Filter auf der Grundlage eines CTransformFilter. Der Filter war, bevor ich ihn auseinander genommen habe, dafür zuständig ein Video zu invertieren, d.h. getrennt R-,G- und B-Werte zu invertieren. Dafür erschien es mir auch sehr logisch, dass ein Videoframe (vom Typ IMediaSample*) erstmal in seine RGB-Werte zerlegt wird. Das sah in etwa so aus:
HRESULT CDirectShowFilter::DoTransformation(IMediaSample *pIn, IMediaSample *pOut)
{
...
BYTE *pOutData;
pOut->GetPointer(&pOutData);
...
BYTE *prgbOut = (BYTE*) pOutData;
...
}
Das Array von pOut wird also nach int8 gecastet.
Ich für meinen Teil brauche aber keine Farbkonvertierung, sondern möchte nur einzelne Pixel an andere Stellen schieben. Dafür würde es mir vollkommen reichen etwas in dieser Art zu tun:
HRESULT CDirectShowFilter::DoTransformation(IMediaSample *pIn, IMediaSample *pOut)
{
...
pOut[0] = pin[10];
...
}
Abgesehen davon, dass dann aber absolut nicht passiert, geht dann auch die Rechenzeit extrem hoch.
Was für einen Typ hat also IMediaSample? Ich hatte gehofft eine einfache int24-Variable mit den RGB-Werten vorzufinden, aber dem scheint nicht so.
Ich hatte mir vorgestellt das ein weisser Pixel zB so aussieht:
pOut[0] = 0xFFFFFF;
Aber wenn ich das versuche, meckert der Compiler von wegen, IMediaSample und int passt nicht.Vielleicht hat sich schon mal jmd damit beschäftigt und weiss eine Antwort?
Gruß Spawn
Und PS: Sorry mal wieder wegen des langen, unverständlichen Posts