Go to the documentation of this file.
60 void *
data,
int *got_frame,
64 int buf_size = avpkt->
size;
68 unsigned char *y_plane;
69 unsigned char *u_plane;
70 unsigned char *v_plane;
76 const signed char *y_table = (
const signed char*)
buf + 0;
77 const signed char *u_table = (
const signed char*)
buf + 16;
78 const signed char *v_table = (
const signed char*)
buf + 32;
80 unsigned char y_pred, u_pred, v_pred;
82 unsigned char cur_byte;
84 int rawsize =
s->height *
FFALIGN(
s->width,2) * 2;
95 if (buf_size == 48 +
s->height * (
s->width * 3 / 4)) {
97 }
else if(buf_size == rawsize ) {
101 buf_size, 48 +
s->height * (
s->width * 3 / 4));
111 y_plane =
frame->data[0];
112 u_plane =
frame->data[1];
113 v_plane =
frame->data[2];
115 if (buf_size == rawsize) {
116 int linesize =
FFALIGN(
s->width,2) * 2;
117 y_plane +=
frame->linesize[0] *
s->height;
118 for (stream_ptr = 0; stream_ptr < rawsize; stream_ptr += linesize) {
119 y_plane -=
frame->linesize[0];
120 memcpy(y_plane,
buf+stream_ptr, linesize);
125 for (y_ptr = 0, u_ptr = 0, v_ptr = 0;
126 y_ptr < (
s->height *
frame->linesize[0]);
127 y_ptr +=
frame->linesize[0] -
s->width,
128 u_ptr +=
frame->linesize[1] -
s->width / 4,
129 v_ptr +=
frame->linesize[2] -
s->width / 4) {
132 cur_byte =
buf[stream_ptr++];
133 u_plane[u_ptr++] = u_pred = cur_byte & 0xF0;
134 y_plane[y_ptr++] = y_pred = (cur_byte & 0x0F) << 4;
136 cur_byte =
buf[stream_ptr++];
137 v_plane[v_ptr++] = v_pred = cur_byte & 0xF0;
138 y_pred += y_table[cur_byte & 0x0F];
139 y_plane[y_ptr++] = y_pred;
141 cur_byte =
buf[stream_ptr++];
142 y_pred += y_table[cur_byte & 0x0F];
143 y_plane[y_ptr++] = y_pred;
144 y_pred += y_table[(cur_byte & 0xF0) >> 4];
145 y_plane[y_ptr++] = y_pred;
148 pixel_groups =
s->width / 4 - 1;
149 while (pixel_groups--) {
151 cur_byte =
buf[stream_ptr++];
152 u_pred += u_table[(cur_byte & 0xF0) >> 4];
153 u_plane[u_ptr++] = u_pred;
154 y_pred += y_table[cur_byte & 0x0F];
155 y_plane[y_ptr++] = y_pred;
157 cur_byte =
buf[stream_ptr++];
158 v_pred += v_table[(cur_byte & 0xF0) >> 4];
159 v_plane[v_ptr++] = v_pred;
160 y_pred += y_table[cur_byte & 0x0F];
161 y_plane[y_ptr++] = y_pred;
163 cur_byte =
buf[stream_ptr++];
164 y_pred += y_table[cur_byte & 0x0F];
165 y_plane[y_ptr++] = y_pred;
166 y_pred += y_table[(cur_byte & 0xF0) >> 4];
167 y_plane[y_ptr++] = y_pred;
178 #if CONFIG_AURA_DECODER
192 #if CONFIG_CYUV_DECODER
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
static av_cold int init(AVCodecContext *avctx)
This structure describes decoded (raw) audio or video data.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static av_cold int cyuv_decode_init(AVCodecContext *avctx)
static int cyuv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
const char * name
Name of the codec implementation.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
@ AV_PIX_FMT_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
main external API structure.
This structure stores compressed data.
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
int width
picture width / height.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.