38 uint32_t
lq[64], cq[64];
44 16, 11, 10, 16, 24, 40, 51, 61,
45 12, 12, 14, 19, 26, 58, 60, 55,
46 14, 13, 16, 24, 40, 57, 69, 56,
47 14, 17, 22, 29, 51, 87, 80, 62,
48 18, 22, 37, 56, 68, 109, 103, 77,
49 24, 35, 55, 64, 81, 104, 113, 92,
50 49, 64, 78, 87, 103, 121, 120, 101,
51 72, 92, 95, 98, 112, 100, 103, 99
55 17, 18, 24, 47, 99, 99, 99, 99,
56 18, 21, 26, 66, 99, 99, 99, 99,
57 24, 26, 56, 99, 99, 99, 99, 99,
58 47, 66, 99, 99, 99, 99, 99, 99,
59 99, 99, 99, 99, 99, 99, 99, 99,
60 99, 99, 99, 99, 99, 99, 99, 99,
61 99, 99, 99, 99, 99, 99, 99, 99,
62 99, 99, 99, 99, 99, 99, 99, 99
83 const uint8_t *buf,
int size) {
85 if (size < 2 * 64 * 4) {
89 for (i = 0; i < 64; i++, buf += 4)
91 for (i = 0; i < 64; i++, buf += 4)
101 quality =
FFMAX(quality, 1);
102 for (i = 0; i < 64; i++) {
134 }
else if (quality != c->
quality)
141 const uint8_t *buf = avpkt->
data;
142 int buf_size = avpkt->
size;
145 int orig_size = buf_size;
149 enum {NUV_UNCOMPRESSED =
'0', NUV_RTJPEG =
'1',
150 NUV_RTJPEG_IN_LZO =
'2', NUV_LZO =
'3',
151 NUV_BLACK =
'N', NUV_COPY_LAST =
'L'} comptype;
159 if (buf[0] ==
'D' && buf[1] ==
'R') {
164 ret =
get_quant(avctx, c, buf, buf_size);
171 if (buf[0] !=
'V' || buf_size < 12) {
177 case NUV_RTJPEG_IN_LZO:
179 keyframe = !buf[2];
break;
188 if (comptype == NUV_RTJPEG_IN_LZO || comptype == NUV_LZO) {
190 int inlen = buf_size;
210 if (comptype == NUV_RTJPEG_IN_LZO || comptype == NUV_LZO)
216 if (keyframe && c->
pic.
data[0])
232 case NUV_UNCOMPRESSED: {
234 if (buf_size < c->
width * height * 3 / 2) {
236 height = buf_size / c->
width / 3 * 2;
241 case NUV_RTJPEG_IN_LZO:
254 case NUV_COPY_LAST: {
enum PixelFormat pix_fmt
Pixel format, see PIX_FMT_xxx.
static av_cold int decode_end(AVCodecContext *avctx)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define FF_BUFFER_HINTS_VALID
int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, const uint8_t *buf, int buf_size)
decode one rtjpeg YUV420 frame
int buffer_hints
codec suggestion on buffer type if != 0
void(* release_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called to release buffers which were allocated with get_buffer.
#define RTJPEG_FILE_VERSION
void rtjpeg_decode_init(RTJpegContext *c, DSPContext *dsp, int width, int height, const uint32_t *lquant, const uint32_t *cquant)
initialize an RTJpegContext, may be called multiple times
static int get_quant(AVCodecContext *avctx, NuvContext *c, const uint8_t *buf, int size)
extract quantization tables from codec data into our context
static void get_quant_quality(NuvContext *c, int quality)
set quantization tables from a quality value
static const uint8_t fallback_lquant[]
four components are given, that's all.
int(* reget_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called at the beginning of a frame to get cr buffer for it.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
void av_picture_copy(AVPicture *dst, const AVPicture *src, enum PixelFormat pix_fmt, int width, int height)
Copy image src to dst.
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
av_cold void dsputil_init(DSPContext *c, AVCodecContext *avctx)
static int init(AVCodecParserContext *s)
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
int reference
is this picture used as reference The values for this are the same as the MpegEncContext.picture_structure variable, that is 1->top field, 2->bottom field, 3->frame/both fields.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
static av_cold int decode_init(AVCodecContext *avctx)
unsigned char * decomp_buf
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
enum AVPictureType pict_type
Picture type of the frame, see ?_TYPE below.
int width
picture width / height.
struct AVFrame AVFrame
Audio Video Frame.
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
Decodes LZO 1x compressed data.
#define FF_BUFFER_HINTS_REUSABLE
main external API structure.
static void close(AVCodecParserContext *s)
static void copy_frame(AVFrame *f, const uint8_t *src, int width, int height)
copy frame data from buffer to AVFrame, handling stride.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
#define FF_BUFFER_HINTS_PRESERVE
int avpicture_fill(AVPicture *picture, uint8_t *ptr, enum PixelFormat pix_fmt, int width, int height)
Fill in the AVPicture fields.
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
#define FF_BUFFER_HINTS_READABLE
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static const uint8_t fallback_cquant[]
static int codec_reinit(AVCodecContext *avctx, int width, int height, int quality)
#define RTJPEG_HEADER_SIZE
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given block if it is not large enough, otherwise do nothing.
int key_frame
1 -> keyframe, 0-> not
#define lq(base, off, reg)
static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
#define MKTAG(a, b, c, d)