C
cobol
Jungspund
Hallo alle zusammen,
mein Problem ist das ich gerne die Matrix die zur Bildwiedergabe von einer Kamera , die an einen Framegrabber angeschlossen ist mir anzeigen oder auch spiechern möchte.
Es handelt sich um ein bestehendes Programm und ich aheb bisher nur sehr wenig Erfahrung mit Video-Porgrammen.
Dies ist, so denke ich, die Stelle an der ich das abgreifen und anzeigen bzw. speichern kann aber bin mir nicht sicher und auch nicht sicher wie ich das am besten löse. Also nun das Stück aus dem Code (falls es erforderlich sein sollte kann ich auch den ganzen Code posten, ist aber dann etwas länger):
static int load_png_to_packed4444( uint8_t *buffer, int *active,
int width, int height, int stride,
double pixel_aspect, pnginput_t *pngin )
{
int has_alpha = pnginput_has_alpha( pngin );
int pngwidth, pngheight;
uint8_t *cb444;
uint8_t *curout;
int i;
pngwidth = pnginput_get_width( pngin );
pngheight = pnginput_get_height( pngin );
cb444 = malloc( pngwidth * 3 );
if( !cb444 ) return 0;
curout = malloc( pngwidth * 4 );
if( !curout ) {
free( cb444 );
return 0;
}
for( i = 0; i < height; i++ ) {
uint8_t *scanline = pnginput_get_scanline( pngin, i );
uint8_t *outputscanline = buffer + (stride * i);
if( has_alpha ) {
rgba32_to_packed4444_rec601_scanline( curout, scanline, pngwidth );
premultiply_packed4444_scanline( curout, curout, pngwidth );
} else {
rgb24_to_packed444_rec601_scanline( cb444, scanline, pngwidth );
packed444_to_nonpremultiplied_packed4444_scanline( curout, cb444, pngwidth, 255 );
}
aspect_adjust_packed4444_scanline( outputscanline, curout, pngwidth, pixel_aspect );
if( active ) {
int x;
active[ i ] = 0;
for( x = 0; x < width; x++ ) {
if( outputscanline[ (x * 4) ] ) {
active[ i ] = 1;
break;
}
}
}
}
free( curout );
free( cb444 );
return 1;
}
Kann mir da jemand vielleicht dann etwas weiterhelfen?
MfG
Cobol
mein Problem ist das ich gerne die Matrix die zur Bildwiedergabe von einer Kamera , die an einen Framegrabber angeschlossen ist mir anzeigen oder auch spiechern möchte.
Es handelt sich um ein bestehendes Programm und ich aheb bisher nur sehr wenig Erfahrung mit Video-Porgrammen.
Dies ist, so denke ich, die Stelle an der ich das abgreifen und anzeigen bzw. speichern kann aber bin mir nicht sicher und auch nicht sicher wie ich das am besten löse. Also nun das Stück aus dem Code (falls es erforderlich sein sollte kann ich auch den ganzen Code posten, ist aber dann etwas länger):
static int load_png_to_packed4444( uint8_t *buffer, int *active,
int width, int height, int stride,
double pixel_aspect, pnginput_t *pngin )
{
int has_alpha = pnginput_has_alpha( pngin );
int pngwidth, pngheight;
uint8_t *cb444;
uint8_t *curout;
int i;
pngwidth = pnginput_get_width( pngin );
pngheight = pnginput_get_height( pngin );
cb444 = malloc( pngwidth * 3 );
if( !cb444 ) return 0;
curout = malloc( pngwidth * 4 );
if( !curout ) {
free( cb444 );
return 0;
}
for( i = 0; i < height; i++ ) {
uint8_t *scanline = pnginput_get_scanline( pngin, i );
uint8_t *outputscanline = buffer + (stride * i);
if( has_alpha ) {
rgba32_to_packed4444_rec601_scanline( curout, scanline, pngwidth );
premultiply_packed4444_scanline( curout, curout, pngwidth );
} else {
rgb24_to_packed444_rec601_scanline( cb444, scanline, pngwidth );
packed444_to_nonpremultiplied_packed4444_scanline( curout, cb444, pngwidth, 255 );
}
aspect_adjust_packed4444_scanline( outputscanline, curout, pngwidth, pixel_aspect );
if( active ) {
int x;
active[ i ] = 0;
for( x = 0; x < width; x++ ) {
if( outputscanline[ (x * 4) ] ) {
active[ i ] = 1;
break;
}
}
}
}
free( curout );
free( cb444 );
return 1;
}
Kann mir da jemand vielleicht dann etwas weiterhelfen?
MfG
Cobol