Lines Matching refs:enc
80 static struct amdgpu_vce_encode enc;
171 memset(&enc, 0, sizeof(struct amdgpu_vce_encode));
291 enc.width = vce_create[6];
292 enc.height = vce_create[7];
295 alloc_resource(&enc.fb[0], 4096, AMDGPU_GEM_DOMAIN_GTT);
296 resources[num_resources++] = enc.fb[0].handle;
305 ib_cpu[len + 8] = ALIGN(enc.width, align);
306 ib_cpu[len + 9] = ALIGN(enc.width, align);
315 ib_cpu[len + 2] = enc.fb[0].addr >> 32;
316 ib_cpu[len + 3] = enc.fb[0].addr;
322 free_resource(&enc.fb[0]);
352 static void amdgpu_cs_vce_encode_idr(struct amdgpu_vce_encode *enc)
357 unsigned luma_size = ALIGN(enc->width, align) * ALIGN(enc->height, 16);
360 luma_offset = enc->vbuf.addr;
368 ib_cpu[len + 2] = enc->bs[0].addr >> 32;
369 ib_cpu[len + 3] = enc->bs[0].addr;
372 ib_cpu[len + 2] = enc->cpb.addr >> 32;
373 ib_cpu[len + 3] = enc->cpb.addr;
382 ib_cpu[len + 2] = enc->fb[0].addr >> 32;
383 ib_cpu[len + 3] = enc->fb[0].addr;
390 ib_cpu[len + 14] = ALIGN(enc->width, align);
391 ib_cpu[len + 15] = ALIGN(enc->width, align);
395 enc->ib_len = len;
396 if (!enc->two_instance) {
402 static void amdgpu_cs_vce_encode_p(struct amdgpu_vce_encode *enc)
407 unsigned luma_size = ALIGN(enc->width, align) * ALIGN(enc->height, 16);
409 len = (enc->two_instance) ? enc->ib_len : 0;
410 luma_offset = enc->vbuf.addr;
413 if (!enc->two_instance) {
420 ib_cpu[len + 2] = enc->bs[1].addr >> 32;
421 ib_cpu[len + 3] = enc->bs[1].addr;
424 ib_cpu[len + 2] = enc->cpb.addr >> 32;
425 ib_cpu[len + 3] = enc->cpb.addr;
434 ib_cpu[len + 2] = enc->fb[1].addr >> 32;
435 ib_cpu[len + 3] = enc->fb[1].addr;
443 ib_cpu[len + 14] = ALIGN(enc->width, align);
444 ib_cpu[len + 15] = ALIGN(enc->width, align);
462 static void check_result(struct amdgpu_vce_encode *enc)
470 r = amdgpu_bo_cpu_map(enc->fb[i].handle, (void **)&enc->fb[i].ptr);
472 ptr = (uint32_t *)enc->fb[i].ptr;
474 r = amdgpu_bo_cpu_unmap(enc->fb[i].handle);
476 r = amdgpu_bo_cpu_map(enc->bs[i].handle, (void **)&enc->bs[i].ptr);
479 sum += enc->bs[i].ptr[j];
481 r = amdgpu_bo_cpu_unmap(enc->bs[i].handle);
492 vbuf_size = ALIGN(enc.width, align) * ALIGN(enc.height, 16) * 1.5;
495 alloc_resource(&enc.fb[0], 4096, AMDGPU_GEM_DOMAIN_GTT);
496 resources[num_resources++] = enc.fb[0].handle;
497 alloc_resource(&enc.fb[1], 4096, AMDGPU_GEM_DOMAIN_GTT);
498 resources[num_resources++] = enc.fb[1].handle;
499 alloc_resource(&enc.bs[0], bs_size, AMDGPU_GEM_DOMAIN_GTT);
500 resources[num_resources++] = enc.bs[0].handle;
501 alloc_resource(&enc.bs[1], bs_size, AMDGPU_GEM_DOMAIN_GTT);
502 resources[num_resources++] = enc.bs[1].handle;
503 alloc_resource(&enc.vbuf, vbuf_size, AMDGPU_GEM_DOMAIN_VRAM);
504 resources[num_resources++] = enc.vbuf.handle;
505 alloc_resource(&enc.cpb, cpb_size, AMDGPU_GEM_DOMAIN_VRAM);
506 resources[num_resources++] = enc.cpb.handle;
509 r = amdgpu_bo_cpu_map(enc.vbuf.handle, (void **)&enc.vbuf.ptr);
512 memset(enc.vbuf.ptr, 0, vbuf_size);
513 for (i = 0; i < enc.height; ++i) {
514 memcpy(enc.vbuf.ptr, (frame + i * enc.width), enc.width);
515 enc.vbuf.ptr += ALIGN(enc.width, align);
517 for (i = 0; i < enc.height / 2; ++i) {
518 memcpy(enc.vbuf.ptr, ((frame + enc.height * enc.width) + i * enc.width), enc.width);
519 enc.vbuf.ptr += ALIGN(enc.width, align);
522 r = amdgpu_bo_cpu_unmap(enc.vbuf.handle);
529 amdgpu_cs_vce_encode_idr(&enc);
530 amdgpu_cs_vce_encode_p(&enc);
531 check_result(&enc);
535 amdgpu_cs_vce_encode_idr(&enc);
536 amdgpu_cs_vce_encode_p(&enc);
537 check_result(&enc);
541 enc.two_instance = true;
544 amdgpu_cs_vce_encode_idr(&enc);
547 amdgpu_cs_vce_encode_p(&enc);
548 check_result(&enc);
553 amdgpu_cs_vce_encode_idr(&enc);
554 amdgpu_cs_vce_encode_p(&enc);
555 check_result(&enc);
558 free_resource(&enc.fb[0]);
559 free_resource(&enc.fb[1]);
560 free_resource(&enc.bs[0]);
561 free_resource(&enc.bs[1]);
562 free_resource(&enc.vbuf);
563 free_resource(&enc.cpb);
566 static void amdgpu_cs_vce_mv(struct amdgpu_vce_encode *enc)
571 unsigned luma_size = ALIGN(enc->width, align) * ALIGN(enc->height, 16);
574 luma_offset = enc->vbuf.addr;
576 mv_ref_luma_offset = enc->mvrefbuf.addr;
583 ib_cpu[len + 2] = enc->bs[0].addr >> 32;
584 ib_cpu[len + 3] = enc->bs[0].addr;
587 ib_cpu[len + 2] = enc->cpb.addr >> 32;
588 ib_cpu[len + 3] = enc->cpb.addr;
597 ib_cpu[len + 2] = enc->fb[0].addr >> 32;
598 ib_cpu[len + 3] = enc->fb[0].addr;
603 ib_cpu[len + 4] = ALIGN(enc->width, align);
604 ib_cpu[len + 5] = ALIGN(enc->width, align);
606 ib_cpu[len + 7] = enc->mvb.addr >> 32;
607 ib_cpu[len + 8] = enc->mvb.addr;
617 ib_cpu[len + 13] = ALIGN(enc->height, 16);;
618 ib_cpu[len + 14] = ALIGN(enc->width, align);
619 ib_cpu[len + 15] = ALIGN(enc->width, align);
643 enc->ib_len = len;
648 static void check_mv_result(struct amdgpu_vce_encode *enc)
654 r = amdgpu_bo_cpu_map(enc->fb[0].handle, (void **)&enc->fb[0].ptr);
656 r = amdgpu_bo_cpu_unmap(enc->fb[0].handle);
658 r = amdgpu_bo_cpu_map(enc->mvb.handle, (void **)&enc->mvb.ptr);
660 for (j = 0, sum = 0; j < enc->mvbuf_size; ++j)
661 sum += enc->mvb.ptr[j];
663 r = amdgpu_bo_cpu_unmap(enc->mvb.handle);
673 vbuf_size = ALIGN(enc.width, align) * ALIGN(enc.height, 16) * 1.5;
674 enc.mvbuf_size = ALIGN(enc.width, 16) * ALIGN(enc.height, 16) / 8;
677 alloc_resource(&enc.fb[0], 4096, AMDGPU_GEM_DOMAIN_GTT);
678 resources[num_resources++] = enc.fb[0].handle;
679 alloc_resource(&enc.bs[0], bs_size, AMDGPU_GEM_DOMAIN_GTT);
680 resources[num_resources++] = enc.bs[0].handle;
681 alloc_resource(&enc.mvb, enc.mvbuf_size, AMDGPU_GEM_DOMAIN_GTT);
682 resources[num_resources++] = enc.mvb.handle;
683 alloc_resource(&enc.vbuf, vbuf_size, AMDGPU_GEM_DOMAIN_VRAM);
684 resources[num_resources++] = enc.vbuf.handle;
685 alloc_resource(&enc.mvrefbuf, vbuf_size, AMDGPU_GEM_DOMAIN_VRAM);
686 resources[num_resources++] = enc.mvrefbuf.handle;
687 alloc_resource(&enc.cpb, cpb_size, AMDGPU_GEM_DOMAIN_VRAM);
688 resources[num_resources++] = enc.cpb.handle;
691 r = amdgpu_bo_cpu_map(enc.vbuf.handle, (void **)&enc.vbuf.ptr);
694 memset(enc.vbuf.ptr, 0, vbuf_size);
695 for (i = 0; i < enc.height; ++i) {
696 memcpy(enc.vbuf.ptr, (frame + i * enc.width), enc.width);
697 enc.vbuf.ptr += ALIGN(enc.width, align);
699 for (i = 0; i < enc.height / 2; ++i) {
700 memcpy(enc.vbuf.ptr, ((frame + enc.height * enc.width) + i * enc.width), enc.width);
701 enc.vbuf.ptr += ALIGN(enc.width, align);
704 r = amdgpu_bo_cpu_unmap(enc.vbuf.handle);
707 r = amdgpu_bo_cpu_map(enc.mvrefbuf.handle, (void **)&enc.mvrefbuf.ptr);
710 memset(enc.mvrefbuf.ptr, 0, vbuf_size);
711 for (i = 0; i < enc.height; ++i) {
712 memcpy(enc.mvrefbuf.ptr, (frame + (enc.height - i -1) * enc.width), enc.width);
713 enc.mvrefbuf.ptr += ALIGN(enc.width, align);
715 for (i = 0; i < enc.height / 2; ++i) {
716 memcpy(enc.mvrefbuf.ptr,
717 ((frame + enc.height * enc.width) + (enc.height / 2 - i -1) * enc.width), enc.width);
718 enc.mvrefbuf.ptr += ALIGN(enc.width, align);
721 r = amdgpu_bo_cpu_unmap(enc.mvrefbuf.handle);
727 amdgpu_cs_vce_mv(&enc);
728 check_mv_result(&enc);
730 free_resource(&enc.fb[0]);
731 free_resource(&enc.bs[0]);
732 free_resource(&enc.vbuf);
733 free_resource(&enc.cpb);
734 free_resource(&enc.mvrefbuf);
735 free_resource(&enc.mvb);
743 alloc_resource(&enc.fb[0], 4096, AMDGPU_GEM_DOMAIN_GTT);
744 resources[num_resources++] = enc.fb[0].handle;
754 ib_cpu[len + 2] = enc.fb[0].addr >> 32;
755 ib_cpu[len + 3] = enc.fb[0].addr;
763 free_resource(&enc.fb[0]);