Wij zitten met een probleem. Voor een project voor mijn studie zijn wij bezig om beelden uit een firewire camera te halen. Bij deze camera zit een SDK met c++ files. Tussen deze files zit een pre-programmed viewer die de beelden uit de camera haalt en op het scherm laat zien.
Wij hadden deze viewer dusdanig aangepast dat deze het beeld niet meer weergeeft maar een serie beelden als .tif op schijf opslaat. Nu is het alleen zo dat zodra de programmatuur bezig gaat met het wegschrijven van de serie beelden de harde schijf de bottleneck is. Hierdoor kunnen we niet realtime alle beelden opslaan.
Nu hadden we bedacht om de beelden eerst naar het geheugen weg te schrijven (bufferen) en daarna ze een voor een op schijf te zetten. Het geheugen zou hier snel genoeg voor moeten wezen. Dit krijgen wij echter niet voor elkaar. Het is volgens mij niet zo heel ingewikkeld, maar het nadeel is dat we redelijke c/c++ noobs zijn. Dus wie kan ons helpen.
De relevante code (direct uit SDK):
Zodra er een nieuw frame is wordt deze functie aangeroepen, wordt het beeld ververst en indien een user ervoor kiest om het beeld op te slaan wordt deze opgeslagen.
Het adres van de betreffende frame staat in een pointer Pframe welke van het type PdtFrame is.
Kan iemand ons miss helpen met een paar regels code wat het geheugen alloceert, betreffende frame naar een array schrijft en dmv ImageWriteTiff na de serie beelden weggeschreven wordt.
Wij hadden deze viewer dusdanig aangepast dat deze het beeld niet meer weergeeft maar een serie beelden als .tif op schijf opslaat. Nu is het alleen zo dat zodra de programmatuur bezig gaat met het wegschrijven van de serie beelden de harde schijf de bottleneck is. Hierdoor kunnen we niet realtime alle beelden opslaan.
Nu hadden we bedacht om de beelden eerst naar het geheugen weg te schrijven (bufferen) en daarna ze een voor een op schijf te zetten. Het geheugen zou hier snel genoeg voor moeten wezen. Dit krijgen wij echter niet voor elkaar. Het is volgens mij niet zo heel ingewikkeld, maar het nadeel is dat we redelijke c/c++ noobs zijn. Dus wie kan ons helpen.
De relevante code (direct uit SDK):
code:
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
| void CMainFrame::callbackNewFrame(void* context, PdtFrame* pFrame)
{
CMainFrame* pThis = (CMainFrame*) context;
// 1. Update view.
pThis->m_wndView.CopyFrame(pFrame);
// 2. Update histogram, if it's open.
pThis->m_lockHistogramWnd.Lock();
if (pThis->m_pWndHistogram) //ZZZZ Known bug...
pThis->m_pWndHistogram->UpdateHistogram(pFrame);
// 3. Save this to a file?
if (!pThis->m_saveFrame.IsEmpty())
{
ImageWriteTiff(pThis->m_saveFrame, pFrame);
pThis->m_saveFrame.Empty();
}
pThis->m_lockHistogramWnd.Unlock();
} |
Zodra er een nieuw frame is wordt deze functie aangeroepen, wordt het beeld ververst en indien een user ervoor kiest om het beeld op te slaan wordt deze opgeslagen.
Het adres van de betreffende frame staat in een pointer Pframe welke van het type PdtFrame is.
Kan iemand ons miss helpen met een paar regels code wat het geheugen alloceert, betreffende frame naar een array schrijft en dmv ImageWriteTiff na de serie beelden weggeschreven wordt.