func getFileBytes(gpFileIn *C.CameraFile, bufferOut io.Writer) error { var fileData *C.char var fileLen C.ulong C.gp_file_get_data_and_size(gpFileIn, (**C.char)(unsafe.Pointer(&fileData)), &fileLen) hdr := reflect.SliceHeader{ Data: uintptr(unsafe.Pointer(fileData)), Len: int(fileLen), Cap: int(fileLen), } goSlice := *(*[]byte)(unsafe.Pointer(&hdr)) _, err := bufferOut.Write(goSlice) return err }
func (c *Camera) FileReader(folder string, fileName string) io.ReadCloser { cfr := new(cameraFileReader) cfr.camera = c cfr.folder = folder cfr.fileName = fileName cfr.offset = 0 cfr.closed = false cFileName := C.CString(cfr.fileName) cFolderName := C.CString(cfr.folder) defer C.free(unsafe.Pointer(cFileName)) defer C.free(unsafe.Pointer(cFolderName)) C.gp_file_new(&cfr.cCameraFile) C.gp_camera_file_get(c.camera, cFolderName, cFileName, C.GP_FILE_TYPE_NORMAL, cfr.cCameraFile, c.context) var cSize C.ulong C.gp_file_get_data_and_size(cfr.cCameraFile, &cfr.cBuffer, &cSize) cfr.fullSize = uint64(cSize) return cfr }