25 #define BITSTREAM_READER_LE
101 static const int8_t
luma_adjust[] = { -4, -3, -2, -1, 1, 2, 3, 4 };
104 { 1, 1, 0, -1, -1, -1, 0, 1 },
105 { 0, 1, 1, 1, 0, -1, -1, -1 }
109 20, 28, 36, 44, 52, 60, 68, 76,
110 84, 92, 100, 106, 112, 116, 120, 124,
111 128, 132, 136, 140, 144, 150, 156, 164,
112 172, 180, 188, 196, 204, 212, 220, 228
122 "Dimensions should be a multiple of two.\n");
194 int buf_size = avpkt->
size;
200 uint8_t *old_y, *old_cb, *old_cr,
201 *new_y, *new_cb, *new_cr;
203 unsigned old_y_stride, old_cb_stride, old_cr_stride,
204 new_y_stride, new_cb_stride, new_cr_stride;
205 unsigned total_blocks = avctx->
width * avctx->
height / 4,
206 block_index, block_x = 0;
207 unsigned y[4] = { 0 },
cb = 0x10,
cr = 0x10;
208 int skip = -1, y_avg = 0, i, j;
212 if (buf_size <= 16) {
237 for (block_index = 0; block_index < total_blocks; block_index++) {
250 y[2] = old_y[old_y_stride];
251 y[3] = old_y[old_y_stride + 1];
257 unsigned sign_selector =
get_bits(&gb, 6);
258 unsigned difference_selector =
get_bits(&gb, 2);
260 for (i = 0; i < 4; i++) {
261 y[i] = av_clip(y_avg +
offset_table[difference_selector] *
268 unsigned adjust_index =
get_bits(&gb, 3);
271 for (i = 0; i < 4; i++)
280 unsigned adjust_index =
get_bits(&gb, 3);
290 new_y[new_y_stride] = y[2];
291 new_y[new_y_stride + 1] = y[3];
302 if (block_x * 2 == avctx->
width) {
304 old_y += old_y_stride * 2 - avctx->
width;
305 old_cb += old_cb_stride - avctx->
width / 2;
306 old_cr += old_cr_stride - avctx->
width / 2;
307 new_y += new_y_stride * 2 - avctx->
width;
308 new_cb += new_cb_stride - avctx->
width / 2;
309 new_cr += new_cr_stride - avctx->
width / 2;
321 for (j = 0; j < avctx->
height; j++) {
322 for (i = 0; i < avctx->
width; i++)
323 dstY[i] = new_y[i] << 2;
325 new_y += new_y_stride;
327 for (j = 0; j < avctx->
height / 2; j++) {
328 for (i = 0; i < avctx->
width / 2; i++) {
334 new_cb += new_cb_stride;
335 new_cr += new_cr_stride;
338 av_dlog(avctx,
"Frame data: provided %d bytes, used %d bytes\n",