Tut mir leid, da hab ich im Moment nix. Was sagt denn der Google dazu ?
mfg robert
Druckbare Version
Tut mir leid, da hab ich im Moment nix. Was sagt denn der Google dazu ?
mfg robert
Hallo ich habe das mit dem sample grapper fertig. in c++ MS 6.0
ist der Thread noch aktuell ?
Na sicher doch. Nachdem im Forum vornehmlich von Sachen berichtet wird, dir NICHT funktionieren, wär's schon, wenn du uns mal an einem Erfolg teilhaben läßt. mfg robert
ja er ist noch aktuell,
ich blick da noch nicht ganz durch, ich hab jetzt den samplegrabber soweit dass er mir bmp's auf die platte schreibt. ich will jedoch dass ich gleichzeitig auch den livestream anschauen kann, also:
ich will z.B. 1mal pro sekunde ein Bitmap aber live alles sehen.
ich hab das mal mit dem SmartTree versucht, der ja angeblich den stream teilen kann, leider zeigt er immer nur den gegrabbten teil an.
ja, wie PicNick sagt: "wär's schön, wenn du uns mal an einem Erfolg teilhaben läßt"
Ok leider habe ich den source nicht dabei.
so das ihn jetzt nicht hochladen kann.
also bei mir läuft prv und bilder klauen und auf die platte allso gleich zeitig.
aber vorsicht dann tut die kiste nix anders mehr (AMD 1000) scsi
einteil des source habe ich schon hier veröffentlicht.
https://www.roboternetz.de/phpBB2/ze...rag.php?t=2486
seite vier aber das hat gunfire ja schon
eines mene ich mich noch dunkel zu erinnern. das schreiben und bilder klauen gleichzeitig ist abhänig vom treiber der karte.
gunfire schreibst du das bilder im grapper ?
ja im grabber, aber eigentlich will ich gar nicht schreiben sonder nur analysieren, das schreiben war nur mal so zum testen.
hm wenn du schon mit 1 cam probleme bekommst bin ich mal gespannt wieviel ressourcen dann 4 brauchen, aber das soll nicht das prob. sein.
mir ist nur das mit dem preview nicht klar, wär cool wenn du mal was hochladen könntest.
ja du bekommst noch was so bald ich wieder zugriff habe.
das mit dem grapper vergiss es das tut jetzt noch aber die vorschau
wird nur noch ruckeln.ausser dem gibt das drop frames.
Hast du schon mal mit threads programmier ?
du muß die mit new einfach ein array of byte im speicher an legen
und den pointer dann per nachricht an den anderen Thread schicken.
in dem kannst du dann alles mit den daten machen was du willst.
so mache ich das auch.
Alles klar ?
Gruß
Hallo,
hier sind source auszüge.
Aber nicht kommerziell nutzen
ich hoffe es hilft dirCode:
STDMETHODIMP BufferCB( double SampleTime, BYTE * pBuffer, long BufferSize )
{
if(g_bWantBimap)
{
CBitmapData* pBitmapData = new CBitmapData;
if (!pBuffer)
return E_POINTER;
if( pBitmapData->lBufferSize < BufferSize)
{
if (pBitmapData->pBuffer)
{
delete [] pBitmapData->pBuffer;
}
pBitmapData->pBuffer = NULL;
pBitmapData->lBufferSize = 0;
}
// Since we can't access Windows API functions in this callback, just
// copy the bitmap data to a global structure for later reference.
pBitmapData->dblSampleTime = SampleTime;
// If we haven't yet allocated the data buffer, do it now.
// Just allocate what we need to store the new bitmap.
if (!pBitmapData->pBuffer)
{
pBitmapData->pBuffer = new BYTE[BufferSize];
pBitmapData->lBufferSize = BufferSize;
}
if( !pBitmapData->pBuffer )
{
pBitmapData->lBufferSize = 0;
return E_OUTOFMEMORY;
}
// Copy the bitmap data into our global buffer
memcpy(pBitmapData->pBuffer, pBuffer, BufferSize);
pBitmapData->Height = Height;
pBitmapData->Width = Width;
// Post a message to our application, telling it to come back
// and write the saved data to a bitmap file on the user's disk.
PostThreadMessage(m_pRoboControlThreadId, WM_CAPTURE_BITMAP, NULL, (long)pBitmapData);
g_bWantBimap = FALSE;
}
return S_OK;
}
das ist die routine wo das bild verschickt wird
class CBitmapData
{
public:
CBitmapData();
virtual ~CBitmapData();
double dblSampleTime;
long lBufferSize;
BYTE *pBuffer;
BITMAPINFOHEADER bih;
long Width;
long Height;
};
hier ist das bimapt drin
m_pGrabber->SetOneShot(FALSE);
m_pGrabber->SetBufferSamples(TRUE);
m_pGrabber->SetCallback(&g_CB, 1); // 0 = Use the SampleCB callback method.
hier wird der grapper über geben und der Mode bestimmt
// Jetzt den Framegrapper auf bauen
if (!m_pGrabber)
{
hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
}
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
CMediaType VideoType;
VideoType.SetType( &MEDIATYPE_Video );
VideoType.SetSubtype( &MEDIASUBTYPE_RGB24 );
hr = m_pGrabber->SetMediaType( &VideoType ); // shouldn't fail
hr = pFg->AddFilter( pGrabBase, L"Grabber" );
// ende
das baut den grapper zu sammen
wenn du mein test prg haben willst da sag bescheit
cool danke, soweit hab ichs im prinzip auch,
kannst du mir das testprog mal schicken? das mit dem preview ist da ja so auch net drin...
wär echt super. danke schonmal...
Hier das test Prg,
MS:Code:if( fMPEG2 )
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Stream, pVCap, pGrabBase, NULL);
if( FAILED( hr ) )
{
ErrMsg(TEXT("Cannot build MPEG2 preview graph!"));
}
}
else
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Interleaved, pVCap, pGrabBase, NULL);
if(hr == VFW_S_NOPREVIEWPIN)
{
// preview was faked up for us using the (only) capture pin
fPreviewFaked = TRUE;
}
else if(hr != S_OK)
{
// maybe it's DV?
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video, pVCap, pGrabBase, NULL);
if(hr == VFW_S_NOPREVIEWPIN)
{
// preview was faked up for us using the (only) capture pin
fPreviewFaked = TRUE;
}
else if(hr != S_OK)
{
ErrMsg(TEXT("This graph cannot preview!"));
fPreviewGraphBuilt = FALSE;
return FALSE;
}
}
//
// Render the closed captioning pin? It could be a CC or a VBI category pin,
// depending on the capture driver
//
if(fCapCC)
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_CC, NULL,
pVCap, NULL, NULL);
if(hr != NOERROR)
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_VBI, NULL,
pVCap, NULL, NULL);
if(hr != NOERROR)
{
ErrMsg(TEXT("Cannot render closed captioning"));
}
}
}
}
// build the preview graph!
//
// !!! PLEASE NOTE !!! Some new WDM devices have totally separate capture
// and preview settings. An application that wishes to preview and then
// capture may have to set the preview pin format using IAMStreamConfig on the
// preview pin, and then again on the capture pin to capture with that format.
// In this sample app, there is a separate page to set the settings on the
// capture pin and one for the preview pin. To avoid the user
// having to enter the same settings in 2 dialog boxes, an app can have its own
// UI for choosing a format (the possible formats can be enumerated using
// IAMStreamConfig) and then the app can programmatically call IAMStreamConfig