/** Documented at declaration */ int gpujpeg_table_quantization_encoder_init(struct gpujpeg_table_quantization* table, enum gpujpeg_component_type type, int quality) { // Load raw table in zig-zag order gpujpeg_table_quantization_set_default(table->table_raw, type); // Update raw table by quality nppiQuantFwdRawTableInit_JPEG_8u(table->table_raw, quality); // Fix NPP bug before version 4.1 [http://forums.nvidia.com/index.php?showtopic=191896] const NppLibraryVersion* npp_version = nppGetLibVersion(); if ( npp_version->major < 4 || (npp_version->major == 4 && npp_version->minor == 0) ) { for ( int i = 0; i < 64; i++ ) { table->table[gpujpeg_order_natural[i]] = ((1 << 15) / (double)table->table_raw[i]) + 0.5; } } else { // Load forward table from raw table nppiQuantFwdTableInit_JPEG_8u16u(table->table_raw, table->table); } // Copy tables to device memory if ( cudaSuccess != cudaMemcpy(table->d_table, table->table, 64 * sizeof(uint16_t), cudaMemcpyHostToDevice) ) return -1; return 0; }
void printfNPPinfo(int argc, char *argv[]) { const char *sComputeCap[] = { "No CUDA Capable Device Found", "Compute 1.0", "Compute 1.1", "Compute 1.2", "Compute 1.3", "Compute 2.0", "Compute 2.1", "Compute 3.0", "Compute 3.5", NULL }; const NppLibraryVersion *libVer = nppGetLibVersion(); NppGpuComputeCapability computeCap = nppGetGpuComputeCapability(); printf("NPP Library Version %d.%d.%d\n", libVer->major, libVer->minor, libVer->build); if (computeCap != 0 && g_nDevice == -1) { printf("%s using GPU <%s> with %d SM(s) with", argv[0], nppGetGpuName(), nppGetGpuNumSMs()); if (computeCap > 0) { printf(" %s\n", sComputeCap[computeCap]); } else { printf(" Unknown Compute Capabilities\n"); } } else { printf("%s\n", sComputeCap[computeCap]); } }
bool printfNPPinfo(int argc, char *argv[], int cudaVerMajor, int cudaVerMinor) { const NppLibraryVersion *libVer = nppGetLibVersion(); printf("NPP Library Version %d.%d.%d\n", libVer->major, libVer->minor, libVer->build); int driverVersion, runtimeVersion; cudaDriverGetVersion(&driverVersion); cudaRuntimeGetVersion(&runtimeVersion); printf(" CUDA Driver Version: %d.%d\n", driverVersion/1000, (driverVersion%100)/10); printf(" CUDA Runtime Version: %d.%d\n", runtimeVersion/1000, (runtimeVersion%100)/10); bool bVal = checkCudaCapabilities(cudaVerMajor, cudaVerMinor); return bVal; }
int gpujpeg_table_quantization_decoder_compute(struct gpujpeg_table_quantization* table) { // Fix NPP bug before version 4.1 [http://forums.nvidia.com/index.php?showtopic=191896] const NppLibraryVersion* npp_version = nppGetLibVersion(); if ( npp_version->major < 4 || (npp_version->major == 4 && npp_version->minor == 0) ) { for ( int i = 0; i < 64; i++ ) { table->table[gpujpeg_order_natural[i]] = table->table_raw[i]; } } else { // Load inverse table from raw table nppiQuantInvTableInit_JPEG_8u16u(table->table_raw, table->table); } // Copy tables to device memory if ( cudaSuccess != cudaMemcpy(table->d_table, table->table, 64 * sizeof(uint16_t), cudaMemcpyHostToDevice) ) return -1; return 0; }