uint RtmpPCI_WriteFragTxResource(int param_1,byte *param_2,ushort param_3,short *param_4)

{
  byte bVar1;
  byte bVar2;
  uint uVar3;
  uint *puVar4;
  byte bVar5;
  byte bVar6;
  int iVar7;
  size_t __n;
  uint *__s;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  
  bVar1 = *param_2;
  iVar8 = (uint)bVar1 * 0x80c;
  uVar10 = (uint)*(ushort *)(param_1 + iVar8 + 0x980);
  iVar11 = param_1 + uVar10 * 0x20 + 0x10 + iVar8;
  __n = (uint)param_2[0xb5] + (uint)param_2[0xb4] + 0x10   //possible issue identified - semgrep
  iVar7 = param_1 + uVar10 * 0x20 + iVar8;
  uVar9 = *(uint *)(iVar7 + 0x19c);
  memmove(*(void **)(iVar11 + 0x188),*(void **)(param_2 + 0xb0),__n)   //possible issue identified - semgrep
  __s = *(uint **)(iVar7 + 0x184);
  memset(__s,0,0x10)   //possible issue identified - semgrep
  if (*(ushort *)(param_2 + 4) == (param_3 & 0xff)) {
    *(undefined4 *)(param_1 + uVar10 * 0x20 + iVar8 + 0x18c) = *(undefined4 *)(param_2 + 0x1c);
    *(undefined4 *)(iVar11 + 0x180) = 0;
  }
  else {
    uVar3 = (int)__s + 3U & 3;
    puVar4 = (uint *)(((int)__s + 3U) - uVar3);
    *puVar4 = *puVar4 & -1 << (uVar3 + 1) * 8 | uVar9 >> (3 - uVar3) * 8;
  }
  *__s = uVar9;
  *(byte *)((int)__s + 7) = *(byte *)((int)__s + 7) & 0xc0 | (byte)(__n * 0x40000 >> 0x1a);
  *(char *)((int)__s + 6) = (char)__n;
  uVar9 = RtmpDrvPciMapSingle(param_1,param_2,0,1,0xff00);
  __s[2] = uVar9;
  bVar2 = *(byte *)((int)__s + 5);
  uVar9 = *(uint *)(param_2 + 0x28) & 0x3fff;
  bVar6 = (byte)(uVar9 >> 8);
  *(char *)(__s + 1) = (char)uVar9;
  *(byte *)((int)__s + 5) = bVar2 & 0xc0 | bVar6;
  if (uVar9 == 0) {
    bVar5 = *(byte *)((int)__s + 7) & 0xbf | 0x40;
    bVar6 = bVar2 & 0x80 | bVar6;
  }
  else {
    bVar6 = bVar2 & 0x80 | bVar6 | 0x40;
    bVar5 = *(byte *)((int)__s + 7) & 0xbf;
  }
  *(byte *)((int)__s + 5) = bVar6;
  *(byte *)((int)__s + 7) = bVar5;
  *(uint *)(param_1 + 0x16abc) = *(uint *)(param_1 + 0x16abc) & 0xffffffef;
  bVar6 = *(byte *)((int)__s + 0xf);
  *(byte *)((int)__s + 0xf) = bVar6 & 0xf8 | 4;
  if (*(char *)(param_1 + 0x769e7) == '\x01') {
    *(byte *)((int)__s + 0xf) = bVar6 & 0xf8 | 2;
    bVar6 = *(byte *)((int)__s + 7);
  }
  else {
    bVar6 = *(byte *)((int)__s + 7);
  }
  *(byte *)((int)__s + 7) = bVar6 & 0x7f;
  *(int *)(param_2 + 0xcc) = *(int *)(param_2 + 0xcc) + *(int *)(param_2 + 0x28);
  *(uint *)((uint)bVar1 * 0x80c + param_1 + 0x980) = uVar10 + 1 & 0x3f;
  *param_4 = *param_4 + -1;
  return uVar10;
}