user: What is the c source code of the assembly code below?

```asm
<pixel_convert_8u_yuv420p_to_8u_rgba>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rax
  mov    %edx,%r14d
  mov    %edx,-0x1c(%rsp)
  mov    %ecx,%edx
  mov    %r9d,-0x18(%rsp)
  mov    %r9d,%edi
  imul   %ecx,%edi
  movslq %edi,%rcx
  lea    (%r8,%rcx,4),%rcx
  mov    %rcx,-0x8(%rsp)
  lea    0x3(%rdi),%ecx
  test   %edi,%edi
  cmovns %edi,%ecx
  sar    $0x2,%ecx
  movslq %ecx,%rcx
  mov    %rcx,-0x28(%rsp)
  mov    %edx,%ecx
  shr    $0x1f,%ecx
  add    %edx,%ecx
  sar    %ecx
  mov    %ecx,-0x14(%rsp)
  cmp    $0x1,%edx
  jle    L19
  mov    %r14d,%r13d
  shr    $0x1f,%r13d
  add    %r14d,%r13d
  sar    %r13d
  lea    (%rsi,%rsi,1),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    %rcx,-0x10(%rsp)
  mov    %rax,-0x38(%rsp)
  movslq %esi,%rsi
  lea    (%rax,%rsi,4),%rax
  mov    %rax,-0x30(%rsp)
  movslq %r9d,%rax
  shl    $0x2,%rax
  mov    %rax,-0x40(%rsp)
  movl   $0x0,-0x20(%rsp)
  mov    $0x0,%r14d
  mov    %r8,%rbx
L0:
  mov    %rbx,%rbp
  add    -0x40(%rsp),%rbx
  mov    -0x20(%rsp),%eax
  mov    %eax,%r11d
  shr    $0x1f,%r11d
  add    %eax,%r11d
  sar    %r11d
  movslq %r11d,%r11
  lea    0x0(,%r11,4),%r12
  add    -0x28(%rsp),%r11
  shl    $0x2,%r11
  cmpl   $0x1,-0x1c(%rsp)
  jle    L28
  mov    -0x30(%rsp),%rcx
  mov    -0x38(%rsp),%rdx
  mov    $0x0,%r8d
  mov    -0x8(%rsp),%rax
  add    %rax,%r12
  add    %rax,%r11
L3:
  mov    (%r12,%r8,4),%eax
  lea    -0x80(%rax),%r9d
  imul   $0x1c6,%r9d,%eax
  sar    $0x8,%eax
  mov    (%r11,%r8,4),%edi
  add    $0xffffff80,%edi
  imul   $0x167,%edi,%esi
  sar    $0x8,%esi
  imul   $0xb7,%edi,%edi
  imul   $0x58,%r9d,%r9d
  add    %r9d,%edi
  sar    $0x8,%edi
  mov    0x0(%rbp,%r8,8),%r9d
  lea    (%rsi,%r9,1),%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,(%rdx)
  mov    %r9d,%r10d
  sub    %edi,%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,0x4(%rdx)
  add    %eax,%r9d
  mov    $0xff,%r10d
  cmp    %r10d,%r9d
  cmovg  %r10d,%r9d
  test   %r9d,%r9d
  mov    $0x0,%r10d
  cmovs  %r10d,%r9d
  mov    %r9d,0x8(%rdx)
  movl   $0x1,0xc(%rdx)
  mov    0x4(%rbp,%r8,8),%r9d
  lea    (%rsi,%r9,1),%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,0x10(%rdx)
  mov    %r9d,%r10d
  sub    %edi,%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,0x14(%rdx)
  add    %eax,%r9d
  mov    $0xff,%r10d
  cmp    %r10d,%r9d
  cmovg  %r10d,%r9d
  test   %r9d,%r9d
  mov    $0x0,%r10d
  cmovs  %r10d,%r9d
  mov    %r9d,0x18(%rdx)
  movl   $0x1,0x1c(%rdx)
  mov    (%rbx,%r8,8),%r9d
  lea    (%rsi,%r9,1),%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,(%rcx)
  mov    %r9d,%r10d
  sub    %edi,%r10d
  mov    $0xff,%r15d
  cmp    %r15d,%r10d
  cmovg  %r15d,%r10d
  test   %r10d,%r10d
  mov    $0x0,%r15d
  cmovs  %r15d,%r10d
  mov    %r10d,0x4(%rcx)
  add    %eax,%r9d
  mov    $0xff,%r10d
  cmp    %r10d,%r9d
  cmovg  %r10d,%r9d
  test   %r9d,%r9d
  mov    $0x0,%r10d
  cmovs  %r10d,%r9d
  mov    %r9d,0x8(%rcx)
  movl   $0x1,0xc(%rcx)
  mov    0x4(%rbx,%r8,8),%r9d
  add    %r9d,%esi
  mov    $0xff,%r10d
  cmp    %r10d,%esi
  cmovg  %r10d,%esi
  test   %esi,%esi
  mov    $0x0,%r10d
  cmovs  %r10d,%esi
  mov    %esi,0x10(%rcx)
  mov    %r9d,%esi
  sub    %edi,%esi
  mov    $0xff,%edi
  cmp    %edi,%esi
  cmovg  %edi,%esi
  test   %esi,%esi
  mov    $0x0,%edi
  cmovs  %edi,%esi
  mov    %esi,0x14(%rcx)
  add    %r9d,%eax
  mov    $0xff,%esi
  cmp    %esi,%eax
  cmovg  %esi,%eax
  test   %eax,%eax
  mov    $0x0,%esi
  cmovs  %esi,%eax
  mov    %eax,0x18(%rcx)
  movl   $0x1,0x1c(%rcx)
  add    $0x1,%r8
  add    $0x20,%rdx
  add    $0x20,%rcx
  cmp    %r8d,%r13d
  jg     L3
L28:
  add    $0x1,%r14d
  mov    -0x18(%rsp),%ecx
  add    %ecx,-0x20(%rsp)
  mov    -0x10(%rsp),%rdx
  add    %rdx,-0x38(%rsp)
  add    %rdx,-0x30(%rsp)
  add    -0x40(%rsp),%rbx
  cmp    -0x14(%rsp),%r14d
  jl     L0
L19:
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
int pixel_convert_8u_yuv420p_to_8u_rgba(uint8_t *dest, int dstride, int dwidth, int dheight, const uint8_t *src, int sstride) {
  const uint8_t *uplane = src + dheight * sstride;
  const uint8_t *vplane = uplane + dheight * sstride / 4;
  for (int i = 0; i < dheight / 2; i++) {
    const uint8_t *yrow1 = src + i * 2 * sstride;
    const uint8_t *yrow2 = src + i * 2 * sstride + sstride;
    const uint8_t *urow = uplane + i * sstride / 2;
    const uint8_t *vrow = vplane + i * sstride / 2;
    uint8_t *rgb1 = dest + i * 2 * dstride;
    uint8_t *rgb2 = dest + i * 2 * dstride + dstride;
    for (int j = 0; j < dwidth / 2; j++) {
      int cb = ((urow[j] - 128) * 454) >> 8;
      int cr = ((vrow[j] - 128) * 359) >> 8;
      int cg = ((vrow[j] - 128) * 183 + (urow[j] - 128) * 88) >> 8;
      int r, g, b, yp;
      yp = yrow1[j * 2];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb1[j * 8 + 0] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb1[j * 8 + 1] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb1[j * 8 + 2] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb1[j * 8 + 3] = 1;
      yp = yrow1[j * 2 + 1];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb1[j * 8 + 4] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb1[j * 8 + 5] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb1[j * 8 + 6] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb1[j * 8 + 7] = 1;
      yp = yrow2[j * 2];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb2[j * 8 + 0] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb2[j * 8 + 1] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb2[j * 8 + 2] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb2[j * 8 + 3] = 1;
      yp = yrow2[j * 2 + 1];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb2[j * 8 + 4] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb2[j * 8 + 5] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb2[j * 8 + 6] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb2[j * 8 + 7] = 1;
    }
  }
  return 0;
}
```