28 #define BITSTREAM_READER_LE
70 s->jpeg_avctx->flags = avctx->
flags;
71 s->jpeg_avctx->flags2 = avctx->
flags2;
72 s->jpeg_avctx->dct_algo = avctx->
dct_algo;
91 a0 = bytestream2_get_le32(gb);
92 a1 = bytestream2_get_le32(gb);
93 a2 = bytestream2_get_le32(gb);
94 a3 = bytestream2_get_le32(gb);
95 dst[
pos] = (((
a0 >> 1) & 0xE00) | (
a0 & 0x1FF)) <<
shift;
103 dst[
pos] = (((
a0 >> 13) & 0x3F) | ((
a0 >> 14) & 0xFC0)) <<
shift;
111 dst[
pos] = (((
a0 >> 26) & 7) | ((
a1 & 0x1FF) << 3)) <<
shift;
119 dst[
pos] = (((
a1 >> 10) & 0x1FF) | ((
a1 >> 11) & 0xE00)) <<
shift;
127 dst[
pos] = (((
a1 >> 23) & 0x3F) | ((
a2 & 0x3F) << 6)) <<
shift;
135 dst[
pos] = (((
a2 >> 7) & 0xFF8) | ((
a2 >> 6) & 7)) <<
shift;
143 dst[
pos] = (((
a3 & 7) << 9) | ((
a2 >> 20) & 0x1FF)) <<
shift;
151 dst[
pos] = (((
a3 >> 4) & 0xFC0) | ((
a3 >> 3) & 0x3F)) <<
shift;
159 dst[
pos] = (((
a3 >> 16) & 7) | ((
a3 >> 17) & 0xFF8)) <<
shift;
178 int ret,
bps, hflip = 0, vflip = 0;
189 char codec_name[1024];
190 uint32_t
key, length;
194 key = bytestream2_get_le32(gb);
195 length = bytestream2_get_le32(gb);
202 if (bytestream2_get_le32(gb) !=
MKTAG(
'D',
'V',
'C',
'C'))
208 width = bytestream2_get_le32(gb);
209 height = bytestream2_get_le32(gb);
210 s->color_model = bytestream2_get_le32(gb);
211 if (bytestream2_get_le32(gb) != 1)
222 if (bytestream2_get_le32(gb) != 0)
227 length -=
FFMIN(length,
sizeof(codec_name) - 1);
228 if (strncmp(codec_name,
"cintel_craw",
FFMIN(length,
sizeof(codec_name) - 1)))
236 s->data_size = length;
239 hflip = bytestream2_get_byte(gb) != 0;
243 vflip = bytestream2_get_byte(gb) != 0;
257 for (
int i = 0;
i < 4;
i++)
258 s->tile_size[
i] = bytestream2_get_le64(gb);
267 switch (
s->color_model) {
287 switch (
s->color_model) {
308 for (
int i = 0;
i < 4;
i++) {
309 if (
s->tile_size[
i] >=
s->data_size)
313 if (
s->tile_size[0] +
s->tile_size[1] +
s->tile_size[2] +
s->tile_size[3] !=
318 if (!
s->data || !
s->data_size)
326 if (!compressed &&
s->color_model == 45) {
327 uint16_t *dst = (uint16_t *)p->
data[0];
332 }
else if (!compressed) {
340 for (
int y = 0; y < avctx->
height; y++) {
341 uint16_t *dst = (uint16_t *)(p->
data[0] + y * p->
linesize[0]);
346 for (
int x = 0; x < avctx->
width; x++)
352 for (
int tile = 0; tile < 4; tile++) {
355 s->jpkt->size =
s->tile_size[tile];
365 s->jpeg_avctx->width * 2 != avctx->
width ||
366 s->jpeg_avctx->height * 2 != avctx->
height) {
369 "JPEG decoding error (%d).\n", ret);
372 "JPEG invalid format.\n");
383 for (
int y = 0; y <
s->jpeg_avctx->height; y++) {
384 const int hw =
s->jpgframe->width / 2;
385 uint16_t *dst = (uint16_t *)(p->
data[0] + (y * 2) * p->
linesize[0] + tile * hw * 2);
386 const uint16_t *
src = (
const uint16_t *)(
s->jpgframe->data[0] + y *
s->jpgframe->linesize[0]);
388 memcpy(dst,
src, hw * 2);
391 memcpy(dst,
src, hw * 2);
399 if (hflip || vflip) {
Libavcodec external API header.
#define AV_EF_EXPLODE
abort decoding on minor error detection
static av_cold int init(AVCodecContext *avctx)
static av_always_inline unsigned int bytestream2_get_buffer(GetByteContext *g, uint8_t *dst, unsigned int size)
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
#define MKTAG(a, b, c, d)
static int cri_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static void unpack_10bit(GetByteContext *gb, uint16_t *dst, int shift, int w, int h, ptrdiff_t stride)
static av_cold int cri_decode_init(AVCodecContext *avctx)
static av_cold int cri_decode_close(AVCodecContext *avctx)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
bitstream reader API header.
static int get_bits_left(GetBitContext *gb)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, buffer_size_t size)
Add a new side data to a frame.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ AV_PICTURE_TYPE_I
Intra.
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure counterclockwise rotation by the specified angle...
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
Flip the input matrix horizontally and/or vertically.
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define AV_PIX_FMT_BAYER_GRBG16
#define AV_PIX_FMT_BAYER_BGGR16
#define AV_PIX_FMT_BAYER_RGGB16
#define AV_PIX_FMT_BAYER_GBRG16
#define AV_PIX_FMT_GRAY16
FF_ENABLE_DEPRECATION_WARNINGS int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
static int shift(int a, int b)
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
int flags2
AV_CODEC_FLAG2_*.
int dct_algo
DCT algorithm, see FF_DCT_* below.
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int idct_algo
IDCT algorithm, see FF_IDCT_* below.
int flags
AV_CODEC_FLAG_*.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
const char * name
Name of the codec implementation.
Structure to hold side data for an AVFrame.
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int key_frame
1 -> keyframe, 0-> not
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
enum AVPictureType pict_type
Picture type of the frame.
This structure stores compressed data.
AVCodecContext * jpeg_avctx
static const uint8_t offset[127][2]