71 if (
size < 2 * 64 * 4) {
75 for (
i = 0;
i < 64;
i++, buf += 4)
77 for (
i = 0;
i < 64;
i++, buf += 4)
89 for (
i = 0;
i < 64;
i++) {
110 if (buf_size > INT_MAX/8)
118 if (!
c->decomp_buf) {
120 "Can't allocate decompression buffer.\n");
135 const uint8_t *buf = avpkt->
data;
136 int buf_size = avpkt->
size;
138 int orig_size = buf_size;
145 NUV_UNCOMPRESSED =
'0',
147 NUV_RTJPEG_IN_LZO =
'2',
159 if (buf[0] ==
'D' && buf[1] ==
'R') {
171 if (buf_size < 12 || buf[0] !=
'V') {
177 case NUV_RTJPEG_IN_LZO:
180 if (
c->width < 16 ||
c->height < 16) {
193 case NUV_UNCOMPRESSED:
194 minsize =
c->width *
c->height * 3 / 2;
197 minsize =
c->width/16 * (
c->height/16) * 6;
202 case NUV_RTJPEG_IN_LZO:
208 if (buf_size < minsize / 4)
214 if (comptype == NUV_RTJPEG_IN_LZO || comptype == NUV_LZO) {
216 int inlen = buf_size;
225 if (
c->codec_frameheader) {
234 if (buf[0] !=
'V' &&
AV_RL16(&buf[4]) != 0x000c) {
245 buf_size = avpkt->
size;
253 if (size_change || keyframe) {
261 memset(
c->pic->data[0], 0, avctx->
height *
c->pic->linesize[0]);
262 memset(
c->pic->data[1], 0x80, avctx->
height *
c->pic->linesize[1] / 2);
263 memset(
c->pic->data[2], 0x80, avctx->
height *
c->pic->linesize[2] / 2);
274 case NUV_UNCOMPRESSED: {
278 height = buf_size /
c->width / 3 * 2;
284 case NUV_RTJPEG_IN_LZO:
291 memset(
c->pic->data[0], 0,
c->width *
c->height);
292 memset(
c->pic->data[1], 128,
c->width *
c->height / 4);
293 memset(
c->pic->data[2], 128,
c->width *
c->height / 4);
317 c->decomp_buf =
NULL;
const FFCodec ff_nuv_decoder
static av_cold void close(AVCodecParserContext *s)
Libavcodec external API header.
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
common internal and external API header
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Identical in function to ff_get_buffer(), except it reuses the existing buffer if available.
#define FF_REGET_BUFFER_FLAG_READONLY
the returned buffer does not need to be writable
int ff_set_dimensions(AVCodecContext *s, int width, int height)
int(* init)(AVBSFContext *ctx)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
Decodes LZO 1x compressed data.
#define AV_LZO_OUTPUT_PADDING
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], const uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height, int align)
Setup the data pointers and linesizes based on the specified image parameters and the provided array.
static void av_image_copy2(uint8_t *const dst_data[4], const int dst_linesizes[4], uint8_t *const src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height)
Wrapper around av_image_copy() to workaround the limitation that the conversion from uint8_t * const ...
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
const uint8_t ff_mjpeg_std_luminance_quant_tbl[64]
const uint8_t ff_mjpeg_std_chrominance_quant_tbl[64]
static av_cold int decode_init(AVCodecContext *avctx)
static av_cold int decode_end(AVCodecContext *avctx)
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
static void init_frame(FlacEncodeContext *s, int nb_samples)
static void get_quant_quality(NuvContext *c, int quality)
set quantization tables from a quality value
static void copy_frame(AVFrame *f, const uint8_t *src, int width, int height)
copy frame data from buffer to AVFrame, handling stride.
static av_cold int decode_init(AVCodecContext *avctx)
static av_cold int decode_end(AVCodecContext *avctx)
static int get_quant(AVCodecContext *avctx, NuvContext *c, const uint8_t *buf, int size)
extract quantization tables from codec data into our context
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
static int codec_reinit(AVCodecContext *avctx, int width, int height, int quality)
#define MKTAG(a, b, c, d)
Memory handling functions.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
av_cold void ff_rtjpeg_init(RTJpegContext *c, struct AVCodecContext *avctx)
void ff_rtjpeg_decode_init(RTJpegContext *c, int width, int height, const uint32_t *lquant, const uint32_t *cquant)
initialize an RTJpegContext, may be called multiple times
int ff_rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, const uint8_t *buf, int buf_size)
decode one rtjpeg YUV420 frame
#define RTJPEG_HEADER_SIZE
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
int64_t frame_num
Frame counter, set by libavcodec.
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
unsigned char * decomp_buf
static const uint8_t quality[]