Custom Allocators
Video Allocators
bool video_custom_allocator(void* p_opaque, NDIlib_video_frame_v2_t* p_video_data)
{
switch (p_video_data->FourCC) {
case NDIlib_FourCC_video_type_UYVY:
p_video_data->line_stride_in_bytes = p_video_data->xres * 2;
p_video_data->p_data = (uint8_t*)malloc(
p_video_data->line_stride_in_bytes * p_video_data->yres
);
break;
case NDIlib_FourCC_video_type_UYVA:
p_video_data->line_stride_in_bytes = p_video_data->xres * 2;
p_video_data->p_data = (uint8_t*)malloc(
/* UYVY */p_video_data->line_stride_in_bytes * p_video_data->yres +
/* Alpha */p_video_data->line_stride_in_bytes / 2 * p_video_data->yres
);
break;
case NDIlib_FourCC_video_type_P216:
p_video_data->line_stride_in_bytes = p_video_data->xres * sizeof(uint16_t);
p_video_data->p_data = (uint8_t*)malloc(
/* Y */p_video_data->line_stride_in_bytes * p_video_data->yres +
/* CbCr */p_video_data->line_stride_in_bytes * p_video_data->yres
);
break;
case NDIlib_FourCC_video_type_PA16:
p_video_data->line_stride_in_bytes = p_video_data->xres * sizeof(uint16_t);
p_video_data->p_data = (uint8_t*)malloc(
/* Y */p_video_data->line_stride_in_bytes * p_video_data->yres +
/* CbCr */p_video_data->line_stride_in_bytes * p_video_data->yres +
/* Alpha */p_video_data->line_stride_in_bytes * p_video_data->yres
);
break;
case NDIlib_FourCC_video_type_BGRA:
case NDIlib_FourCC_video_type_BGRX:
case NDIlib_FourCC_video_type_RGBA:
case NDIlib_FourCC_video_type_RGBX:
p_video_data->line_stride_in_bytes = p_video_data->xres * 4;
p_video_data->p_data = (uint8_t*)malloc(
p_video_data->>line_stride_in_bytes*p_video_data->yres
);
break;
default:
// Error, not a supported FourCC
p_video_data->line_stride_in_bytes = 0;
p_video_data->p_data = NULL;
return false;
}
return true; // Success.
}
bool video_custom_deallocator(void* p_opaque, const NDIlib_video_frame_v2_t* p_video_data)
{
free(p_video_data->p_data);
return true;
}
Audio Allocators
Last updated
Was this helpful?

