Files
UltraGrid/libgpujpeg/gpujpeg_type.h
Martin Pulec 8925abe4ab Some tweaks
Removed some Clang warnings.
2012-05-25 10:47:40 +02:00

271 lines
8.3 KiB
C

/**
* Copyright (c) 2011, CESNET z.s.p.o
* Copyright (c) 2011, Silicon Genome, LLC.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GPUJPEG_TYPE_H
#define GPUJPEG_TYPE_H
#include <stdint.h>
#include <cuda_runtime.h>
/** Contants */
#define GPUJPEG_BLOCK_SIZE 8
#define GPUJPEG_BLOCK_SQUARED_SIZE 64
#define GPUJPEG_MAX_COMPONENT_COUNT 3
#define GPUJPEG_MAX_BLOCK_COMPRESSED_SIZE (GPUJPEG_BLOCK_SIZE * GPUJPEG_BLOCK_SIZE * 2)
/** Maximum JPEG header size (MUST be divisible by 4!!!) */
#define GPUJPEG_MAX_HEADER_SIZE (65536 - 100)
/** Flags */
#define GPUJPEG_VERBOSE 1
#define GPUJPEG_OPENGL_INTEROPERABILITY 2
/** Maximum number of segment info header in stream */
#define GPUJPEG_MAX_SEGMENT_INFO_HEADER_COUNT 100
/**
* Color spaces for JPEG codec
*/
enum gpujpeg_color_space {
GPUJPEG_NONE = 0,
GPUJPEG_RGB = 1,
GPUJPEG_YCBCR_BT601 = 2,
GPUJPEG_YCBCR_BT601_256LVLS = 3,
GPUJPEG_YCBCR_BT709 = 4,
GPUJPEG_YCBCR = GPUJPEG_YCBCR_BT709,
GPUJPEG_YUV = 5
};
/**
* Get color space name
*
* @param color_space
*/
static inline __device__ __host__ const char*
gpujpeg_color_space_get_name(enum gpujpeg_color_space color_space)
{
switch ( color_space ) {
case GPUJPEG_NONE:
return "None";
case GPUJPEG_RGB:
return "RGB";
case GPUJPEG_YUV:
return "YUV";
case GPUJPEG_YCBCR_BT601:
return "YCbCr BT.601";
case GPUJPEG_YCBCR_BT601_256LVLS:
return "YCbCr BT.601 256 Levels";
case GPUJPEG_YCBCR_BT709:
return "YCbCr BT.709";
default:
return "Unknown";
}
}
/**
* Sampling factor for image data
*/
enum gpujpeg_sampling_factor {
GPUJPEG_4_4_4 = ((4 << 16) | (4 << 8) | 4),
GPUJPEG_4_2_2 = ((4 << 16) | (2 << 8) | 2),
};
/**
* Sampling factor for color component in JPEG format
*/
struct gpujpeg_component_sampling_factor
{
uint8_t horizontal;
uint8_t vertical;
};
/**
* JPEG component type
*/
enum gpujpeg_component_type {
GPUJPEG_COMPONENT_LUMINANCE = 0,
GPUJPEG_COMPONENT_CHROMINANCE = 1,
GPUJPEG_COMPONENT_TYPE_COUNT = 2
};
/**
* JPEG huffman type
*/
enum gpujpeg_huffman_type {
GPUJPEG_HUFFMAN_DC = 0,
GPUJPEG_HUFFMAN_AC = 1,
GPUJPEG_HUFFMAN_TYPE_COUNT = 2
};
#include <stdio.h>
/**
* JPEG marker codes
*/
enum gpujpeg_marker_code {
GPUJPEG_MARKER_SOF0 = 0xc0,
GPUJPEG_MARKER_SOF1 = 0xc1,
GPUJPEG_MARKER_SOF2 = 0xc2,
GPUJPEG_MARKER_SOF3 = 0xc3,
GPUJPEG_MARKER_SOF5 = 0xc5,
GPUJPEG_MARKER_SOF6 = 0xc6,
GPUJPEG_MARKER_SOF7 = 0xc7,
GPUJPEG_MARKER_JPG = 0xc8,
GPUJPEG_MARKER_SOF9 = 0xc9,
GPUJPEG_MARKER_SOF10 = 0xca,
GPUJPEG_MARKER_SOF11 = 0xcb,
GPUJPEG_MARKER_SOF13 = 0xcd,
GPUJPEG_MARKER_SOF14 = 0xce,
GPUJPEG_MARKER_SOF15 = 0xcf,
GPUJPEG_MARKER_DHT = 0xc4,
GPUJPEG_MARKER_DAC = 0xcc,
GPUJPEG_MARKER_RST0 = 0xd0,
GPUJPEG_MARKER_RST1 = 0xd1,
GPUJPEG_MARKER_RST2 = 0xd2,
GPUJPEG_MARKER_RST3 = 0xd3,
GPUJPEG_MARKER_RST4 = 0xd4,
GPUJPEG_MARKER_RST5 = 0xd5,
GPUJPEG_MARKER_RST6 = 0xd6,
GPUJPEG_MARKER_RST7 = 0xd7,
GPUJPEG_MARKER_SOI = 0xd8,
GPUJPEG_MARKER_EOI = 0xd9,
GPUJPEG_MARKER_SOS = 0xda,
GPUJPEG_MARKER_DQT = 0xdb,
GPUJPEG_MARKER_DNL = 0xdc,
GPUJPEG_MARKER_DRI = 0xdd,
GPUJPEG_MARKER_DHP = 0xde,
GPUJPEG_MARKER_EXP = 0xdf,
GPUJPEG_MARKER_APP0 = 0xe0,
GPUJPEG_MARKER_APP1 = 0xe1,
GPUJPEG_MARKER_APP2 = 0xe2,
GPUJPEG_MARKER_APP3 = 0xe3,
GPUJPEG_MARKER_APP4 = 0xe4,
GPUJPEG_MARKER_APP5 = 0xe5,
GPUJPEG_MARKER_APP6 = 0xe6,
GPUJPEG_MARKER_APP7 = 0xe7,
GPUJPEG_MARKER_APP8 = 0xe8,
GPUJPEG_MARKER_APP9 = 0xe9,
GPUJPEG_MARKER_APP10 = 0xea,
GPUJPEG_MARKER_APP11 = 0xeb,
GPUJPEG_MARKER_APP12 = 0xec,
GPUJPEG_MARKER_APP13 = 0xed,
GPUJPEG_MARKER_APP14 = 0xee,
GPUJPEG_MARKER_APP15 = 0xef,
GPUJPEG_MARKER_JPG0 = 0xf0,
GPUJPEG_MARKER_JPG13 = 0xfd,
GPUJPEG_MARKER_COM = 0xfe,
GPUJPEG_MARKER_TEM = 0x01,
GPUJPEG_MARKER_ERROR = 0x100
};
/**
* Get marker name from code
*
* @param code
* @return marker name
*/
static inline const char*
gpujpeg_marker_name(enum gpujpeg_marker_code code)
{
switch (code) {
case GPUJPEG_MARKER_SOF0: return "SOF0";
case GPUJPEG_MARKER_SOF1: return "SOF1";
case GPUJPEG_MARKER_SOF2: return "SOF2";
case GPUJPEG_MARKER_SOF3: return "SOF3";
case GPUJPEG_MARKER_SOF5: return "SOF5";
case GPUJPEG_MARKER_SOF6: return "SOF6";
case GPUJPEG_MARKER_SOF7: return "SOF7";
case GPUJPEG_MARKER_JPG: return "JPG";
case GPUJPEG_MARKER_SOF9: return "SOF9";
case GPUJPEG_MARKER_SOF10: return "SOF10";
case GPUJPEG_MARKER_SOF11: return "SOF11";
case GPUJPEG_MARKER_SOF13: return "SOF13";
case GPUJPEG_MARKER_SOF14: return "SOF14";
case GPUJPEG_MARKER_SOF15: return "SOF15";
case GPUJPEG_MARKER_DHT: return "DHT";
case GPUJPEG_MARKER_DAC: return "DAC";
case GPUJPEG_MARKER_RST0: return "RST0";
case GPUJPEG_MARKER_RST1: return "RST1";
case GPUJPEG_MARKER_RST2: return "RST2";
case GPUJPEG_MARKER_RST3: return "RST3";
case GPUJPEG_MARKER_RST4: return "RST4";
case GPUJPEG_MARKER_RST5: return "RST5";
case GPUJPEG_MARKER_RST6: return "RST6";
case GPUJPEG_MARKER_RST7: return "RST7";
case GPUJPEG_MARKER_SOI: return "SOI";
case GPUJPEG_MARKER_EOI: return "EOI";
case GPUJPEG_MARKER_SOS: return "SOS";
case GPUJPEG_MARKER_DQT: return "DQT";
case GPUJPEG_MARKER_DNL: return "DNL";
case GPUJPEG_MARKER_DRI: return "DRI";
case GPUJPEG_MARKER_DHP: return "DHP";
case GPUJPEG_MARKER_EXP: return "EXP";
case GPUJPEG_MARKER_APP0: return "APP0";
case GPUJPEG_MARKER_APP1: return "APP1";
case GPUJPEG_MARKER_APP2: return "APP2";
case GPUJPEG_MARKER_APP3: return "APP3";
case GPUJPEG_MARKER_APP4: return "APP4";
case GPUJPEG_MARKER_APP5: return "APP5";
case GPUJPEG_MARKER_APP6: return "APP6";
case GPUJPEG_MARKER_APP7: return "APP7";
case GPUJPEG_MARKER_APP8: return "APP8";
case GPUJPEG_MARKER_APP9: return "APP9";
case GPUJPEG_MARKER_APP10: return "APP10";
case GPUJPEG_MARKER_APP11: return "APP11";
case GPUJPEG_MARKER_APP12: return "APP12";
case GPUJPEG_MARKER_APP13: return "APP13";
case GPUJPEG_MARKER_APP14: return "APP14";
case GPUJPEG_MARKER_APP15: return "APP15";
case GPUJPEG_MARKER_JPG0: return "JPG0";
case GPUJPEG_MARKER_JPG13: return "JPG13";
case GPUJPEG_MARKER_COM: return "COM";
case GPUJPEG_MARKER_TEM: return "TEM";
case GPUJPEG_MARKER_ERROR: return "ERROR";
default:
{
static char buffer[255];
sprintf(buffer, "Unknown (0x%X)", code);
return buffer;
}
}
}
#endif // GPUJPEG_TYPE_H