keep track of allocated framebuffer, free them at close

This commit is contained in:
c0ntrol
2016-03-21 21:53:23 +01:00
parent 90af056a62
commit d1a074fd1c

View File

@@ -114,6 +114,7 @@ typedef struct
VJFrame *frames[N_FRAMES]; VJFrame *frames[N_FRAMES];
VJFrame *host_frame; VJFrame *host_frame;
int frames_done[N_FRAMES]; int frames_done[N_FRAMES];
uint8_t *data_ptrs[N_FRAMES];
int frameidx; int frameidx;
int frame_ready; int frame_ready;
int is_streaming; int is_streaming;
@@ -1394,15 +1395,12 @@ void v4l2_close( void *d )
if( v->scaler ) if( v->scaler )
yuv_free_swscaler( v->scaler ); yuv_free_swscaler( v->scaler );
if( !v->picture ) for ( i = 0; i < N_FRAMES; i ++ ) {
{ if(v->frames[i])
for ( i = 0; i < N_FRAMES; i ++ ) { free(v->frames[i]);
if(v->frames[i]->data[0]) v->frames[i] = NULL;
free(v->frames[i]->data[0]); if(v->data_ptrs[i])
if(v->frames[i]) free(v->data_ptrs[i]);
free(v->frames[i]);
v->frames[i] = NULL;
}
} }
if(v->picture) { if(v->picture) {
@@ -2020,6 +2018,7 @@ static void *v4l2_grabber_thread( void *v )
v4l2->frames[j]->data[c] = ptr + (c * planes[0]); v4l2->frames[j]->data[c] = ptr + (c * planes[0]);
} }
v4l2->frames_done[j] = 0; v4l2->frames_done[j] = 0;
v4l2->data_ptrs[j] = ptr;
} }
veejay_msg(VEEJAY_MSG_DEBUG, "v4l2: allocated %d buffers of %d bytes each", N_FRAMES, planes[0]*4); veejay_msg(VEEJAY_MSG_DEBUG, "v4l2: allocated %d buffers of %d bytes each", N_FRAMES, planes[0]*4);