14 #include <cuda_runtime_api.h>
36 fp_ = fopen(location.c_str(),
"r");
38 fprintf(stderr,
"Failed to open file %s\n", location.c_str());
45 bool use_gpu_memory =
false;
46 bool use_external_memory =
true;
52 "use-gpu-memory", use_gpu_memory,
"use-external-memory", use_external_memory,
53 "frame-width", width,
"frame-height", height,
"format",
format,
55 unsigned int frame_size = 0;
58 frame_size = width*height*4;
61 frame_size = width*height*1.5;
65 use_gpu_memory =
false;
67 if (frame_size <= 0) {
68 fprintf(stderr,
"Invalid frame size %u\n", frame_size);
70 }
else if (frame_size > size) {
72 fprintf(stderr,
"Frame size is larger than asked %u vs %u\n", frame_size, size);
77 if (buffer_ ==
nullptr) {
78 buffer_ = malloc(frame_size);
80 if (0 == fread (buffer_, 1, frame_size, fp_))
break;
81 if (use_external_memory) {
82 void *cuda_device_data;
83 if (cudaMalloc ((
void **) &cuda_device_data, frame_size) != cudaSuccess) {
84 fprintf(stderr,
"ERROR !! Unable to allocate device memory. \n");
87 if (cudaMemcpy (cuda_device_data, buffer_, frame_size,
88 cudaMemcpyHostToDevice) != cudaSuccess) {
89 fprintf(stderr,
"Unable to copy between device and host memories. \n");
96 [&](
void* data,
size_t len) {
97 if (len != frame_size) {
100 cudaMemcpy(data, buffer_, len, cudaMemcpyHostToDevice);
107 if (use_external_memory) {
108 void* data = malloc(frame_size);
109 if (0 == fread (data, 1, frame_size, fp_))
break;
110 return Buffer(frame_size, data);
112 Buffer buffer(frame_size);
114 [&](
void* data,
size_t len){
115 return fread (data, 1, frame_size, fp_);
128 void* buffer_ =
nullptr;