164
void put_unweighted_pred_16_fallback(uint16_t *dst, ptrdiff_t dststride,
165
const int16_t *src, ptrdiff_t srcstride,
166
int width, int height, int bit_depth)
168
int shift1 = 14-bit_depth;
170
if (shift1>0) { offset1 = 1<<(shift1-1); }
172
assert((width&1)==0);
174
for (int y=0;y<height;y++) {
175
const int16_t* in = &src[y*srcstride];
176
uint16_t* out = &dst[y*dststride];
178
for (int x=0;x<width;x+=2) {
179
out[0] = Clip_BitDepth((in[0] + offset1)>>shift1, bit_depth);
180
out[1] = Clip_BitDepth((in[1] + offset1)>>shift1, bit_depth);
188
void put_weighted_pred_16_fallback(uint16_t *dst, ptrdiff_t dststride,
189
const int16_t *src, ptrdiff_t srcstride,
190
int width, int height,
191
int w,int o,int log2WD, int bit_depth)
193
assert(log2WD>=1); // TODO
195
const int rnd = (1<<(log2WD-1));
197
for (int y=0;y<height;y++) {
198
const int16_t* in = &src[y*srcstride];
199
uint16_t* out = &dst[y*dststride];
201
for (int x=0;x<width;x++) {
202
out[0] = Clip_BitDepth(((in[0]*w + rnd)>>log2WD) + o, bit_depth);
208
void put_weighted_bipred_16_fallback(uint16_t *dst, ptrdiff_t dststride,
209
const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride,
210
int width, int height,
211
int w1,int o1, int w2,int o2, int log2WD, int bit_depth)
213
assert(log2WD>=1); // TODO
215
const int rnd = ((o1+o2+1) << log2WD);
217
for (int y=0;y<height;y++) {
218
const int16_t* in1 = &src1[y*srcstride];
219
const int16_t* in2 = &src2[y*srcstride];
220
uint16_t* out = &dst[y*dststride];
222
for (int x=0;x<width;x++) {
223
out[0] = Clip_BitDepth((in1[0]*w1 + in2[0]*w2 + rnd)>>(log2WD+1), bit_depth);
230
void put_weighted_pred_avg_16_fallback(uint16_t *dst, ptrdiff_t dststride,
231
const int16_t *src1, const int16_t *src2,
232
ptrdiff_t srcstride, int width,
233
int height, int bit_depth)
235
int shift2 = 15-bit_depth;
236
int offset2 = 1<<(shift2-1);
238
assert((width&1)==0);
240
for (int y=0;y<height;y++) {
241
const int16_t* in1 = &src1[y*srcstride];
242
const int16_t* in2 = &src2[y*srcstride];
243
uint16_t* out = &dst[y*dststride];
245
for (int x=0;x<width;x+=2) {
246
out[0] = Clip_BitDepth((in1[0] + in2[0] + offset2)>>shift2, bit_depth);
247
out[1] = Clip_BitDepth((in1[1] + in2[1] + offset2)>>shift2, bit_depth);
248
out+=2; in1+=2; in2+=2;
162
257
void put_epel_8_fallback(int16_t *out, ptrdiff_t out_stride,
163
uint8_t *src, ptrdiff_t src_stride,
258
const uint8_t *src, ptrdiff_t src_stride,
164
259
int width, int height,
165
260
int mx, int my, int16_t* mcbuffer)
169
264
for (int y=0;y<height;y++) {
170
265
int16_t* o = &out[y*out_stride];
171
uint8_t* i = &src[y*src_stride];
173
for (int x=0;x<width;x++) {
182
void put_epel_hv_8_fallback(int16_t *dst, ptrdiff_t dst_stride,
183
uint8_t *src, ptrdiff_t src_stride,
184
int nPbWC, int nPbHC,
185
int xFracC, int yFracC, int16_t* mcbuffer)
187
const int shift1 = 0;
266
const uint8_t* i = &src[y*src_stride];
268
for (int x=0;x<width;x++) {
277
void put_epel_16_fallback(int16_t *out, ptrdiff_t out_stride,
278
const uint16_t *src, ptrdiff_t src_stride,
279
int width, int height,
280
int mx, int my, int16_t* mcbuffer, int bit_depth)
282
int shift3 = 14 - bit_depth;
284
for (int y=0;y<height;y++) {
285
int16_t* o = &out[y*out_stride];
286
const uint16_t* i = &src[y*src_stride];
288
for (int x=0;x<width;x++) {
297
template <class pixel_t>
298
void put_epel_hv_fallback(int16_t *dst, ptrdiff_t dst_stride,
299
const pixel_t *src, ptrdiff_t src_stride,
300
int nPbWC, int nPbHC,
301
int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth)
303
const int shift1 = bit_depth-8;
188
304
const int shift2 = 6;
189
305
//const int shift3 = 6;
411
void put_epel_hv_fallback<uint8_t>(int16_t *dst, ptrdiff_t dst_stride,
412
const uint8_t *src, ptrdiff_t src_stride,
413
int nPbWC, int nPbHC,
414
int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth);
416
void put_epel_hv_fallback<uint16_t>(int16_t *dst, ptrdiff_t dst_stride,
417
const uint16_t *src, ptrdiff_t src_stride,
418
int nPbWC, int nPbHC,
419
int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth);
296
423
void put_qpel_0_0_fallback(int16_t *out, ptrdiff_t out_stride,
297
uint8_t *src, ptrdiff_t srcstride,
424
const uint8_t *src, ptrdiff_t srcstride,
298
425
int nPbW, int nPbH, int16_t* mcbuffer)
300
427
//const int shift1 = 0; // sps->BitDepth_Y-8;
456
void put_qpel_0_0_fallback_16(int16_t *out, ptrdiff_t out_stride,
457
const uint16_t *src, ptrdiff_t srcstride,
458
int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth)
460
//const int shift1 = bit_depth-8;
461
//const int shift2 = 6;
462
const int shift3 = 14-bit_depth;
466
for (int y=0;y<nPbH;y++) {
467
const uint16_t* p = src + srcstride*y;
468
int16_t* o = out + out_stride*y;
470
for (int x=0;x<nPbW;x++) {
471
*o++ = *p++ << shift3;
334
478
static int extra_before[4] = { 0,3,3,2 };
335
479
static int extra_after [4] = { 0,3,4,4 };
481
template <class pixel_t>
337
482
void put_qpel_fallback(int16_t *out, ptrdiff_t out_stride,
338
uint8_t *src, ptrdiff_t srcstride,
483
const pixel_t *src, ptrdiff_t srcstride,
339
484
int nPbW, int nPbH, int16_t* mcbuffer,
340
int xFracL, int yFracL)
485
int xFracL, int yFracL, int bit_depth)
342
487
int extra_left = extra_before[xFracL];
343
488
//int extra_right = extra_after [xFracL];
483
629
#define QPEL(x,y) void put_qpel_ ## x ## _ ## y ## _fallback(int16_t *out, ptrdiff_t out_stride, \
484
uint8_t *src, ptrdiff_t srcstride, \
485
int nPbW, int nPbH, int16_t* mcbuffer) \
486
{ put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y ); }
630
const uint8_t *src, ptrdiff_t srcstride, \
631
int nPbW, int nPbH, int16_t* mcbuffer) \
632
{ put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, 8 ); }
635
#define QPEL16(x,y) void put_qpel_ ## x ## _ ## y ## _fallback_16(int16_t *out, ptrdiff_t out_stride, \
636
const uint16_t *src, ptrdiff_t srcstride, \
637
int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \
638
{ put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); }
488
640
/* */ QPEL(0,1) QPEL(0,2) QPEL(0,3)
489
641
QPEL(1,0) QPEL(1,1) QPEL(1,2) QPEL(1,3)
490
642
QPEL(2,0) QPEL(2,1) QPEL(2,2) QPEL(2,3)
491
643
QPEL(3,0) QPEL(3,1) QPEL(3,2) QPEL(3,3)
645
/* */ QPEL16(0,1) QPEL16(0,2) QPEL16(0,3)
646
QPEL16(1,0) QPEL16(1,1) QPEL16(1,2) QPEL16(1,3)
647
QPEL16(2,0) QPEL16(2,1) QPEL16(2,2) QPEL16(2,3)
648
QPEL16(3,0) QPEL16(3,1) QPEL16(3,2) QPEL16(3,3)