// File: /workspace/github_cpp_makefile_star2_O3/OtherCrashOverride[P]xu4enc/./M2M.h
// Function: M2M::CreateInputBuffers()
void CreateInputBuffers()
	{
		// Request buffers
		v4l2_requestbuffers requestBuffers = { 0 };
		requestBuffers.count = BUFFER_COUNT;
		requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
		requestBuffers.memory = V4L2_MEMORY_MMAP;

		int io = ioctl(mfc_fd, VIDIOC_REQBUFS, &requestBuffers);
		if (io < 0)
		{
			throw Exception("VIDIOC_REQBUFS failed.");
		}

		if (requestBuffers.count > BUFFER_COUNT)
		{
			throw Exception("too many buffers.");
		}
		else
		{
			fprintf(stderr, "CreateInputBuffers: requestBuffers.count=%d\n", requestBuffers.count);
		}


		// Map buffers
		//BufferMapping bufferMappings[requestBuffers.count] = { 0 };
		for (int i = 0; i < requestBuffers.count; ++i)
		{
			v4l2_plane planes[VIDEO_MAX_PLANES];

			v4l2_buffer buffer = { 0 };
			buffer.type = requestBuffers.type;
			buffer.memory = V4L2_MEMORY_MMAP;
			buffer.index = i;
			buffer.m.planes = planes;
			buffer.length = 2;

			io = ioctl(mfc_fd, VIDIOC_QUERYBUF, &buffer);
			if (io < 0)
			{
				throw Exception("VIDIOC_QUERYBUF failed.");
			}

			BufferMapping mapping = { 0 };

			mapping.Length0 = buffer.m.planes[0].length;
			mapping.Start0 = mmap(NULL, mapping.Length0,
				PROT_READ | PROT_WRITE, /* recommended */
				MAP_SHARED,             /* recommended */
				mfc_fd,
				buffer.m.planes[0].m.mem_offset);
			if (mapping.Start0 == MAP_FAILED)
			{
				throw Exception("mmap 0 failed.");
			}

			mapping.Length1 = buffer.m.planes[1].length;
			mapping.Start1 = mmap(NULL, mapping.Length1,
				PROT_READ | PROT_WRITE, /* recommended */
				MAP_SHARED,             /* recommended */
				mfc_fd,
				buffer.m.planes[1].m.mem_offset);
			if (mapping.Start1 == MAP_FAILED)
			{
				throw Exception("mmap 1 failed.");
			}

			inputBuffers.push_back(mapping);
			freeInputBuffers.push(i);

#if 0 // Dont queue input buffers, only output buffers

			// Queue buffers
			int ret = ioctl(mfc_fd, VIDIOC_QBUF, &buffer);
			if (ret != 0)
			{
				throw Exception("VIDIOC_QBUF failed.");
			}
#endif

		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2a8, %rsp            # imm = 0x2A8
movq %rdi, %rbx
movl $0xc0145608, %r14d      # imm = 0xC0145608
leaq -0x74(%rbp), %rdx
movq $0x0, 0xc(%rdx)
movabsq $0xa00000004, %rax      # imm = 0xA00000004
movq %rax, (%rdx)
movl $0x1, 0x8(%rdx)
movl 0x8(%rdi), %edi
movl $0xc0145608, %esi       # imm = 0xC0145608
xorl %eax, %eax
callq 0x2110
testl %eax, %eax
js 0x3712
movl -0x74(%rbp), %edx
cmpl $0x5, %edx
jae 0x3717
movq 0x4a83(%rip), %rax      # 0x7fd8
movq (%rax), %rdi
leaq 0x1e50(%rip), %rsi      # 0x53af
xorl %eax, %eax
callq 0x2120
movl $0x0, -0x2c(%rbp)
cmpl $0x0, -0x74(%rbp)
je 0x36f1
leaq 0x20(%rbx), %rax
movq %rax, -0x60(%rbp)
leaq 0x58(%rbx), %rax
movq %rax, -0x58(%rbp)
leaq -0xc8(%rbp), %r15
xorps %xmm0, %xmm0
leaq -0x2d0(%rbp), %r12
addq $0x440001, %r14         # imm = 0x440001
leaq -0xd0(%rbp), %r13
xorl %eax, %eax
movups %xmm0, 0x40(%r15)
movups %xmm0, 0x30(%r15)
movups %xmm0, 0x20(%r15)
movups %xmm0, 0x10(%r15)
movups %xmm0, (%r15)
movl -0x70(%rbp), %ecx
movl %ecx, -0xcc(%rbp)
movl $0x1, -0x94(%rbp)
movl %eax, -0xd0(%rbp)
movq %r12, -0x90(%rbp)
movl $0x2, -0x88(%rbp)
movl 0x8(%rbx), %edi
movq %r14, %rsi
movq %r13, %rdx
xorl %eax, %eax
callq 0x2110
testl %eax, %eax
js 0x3703
xorps %xmm0, %xmm0
movaps %xmm0, -0x40(%rbp)
movaps %xmm0, -0x50(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %esi
movq %rsi, -0x48(%rbp)
movl 0x8(%rbx), %r8d
movl 0x8(%rax), %r9d
xorl %edi, %edi
movl $0x3, %edx
movl $0x1, %ecx
callq 0x21d0
movq %rax, -0x50(%rbp)
cmpq $-0x1, %rax
je 0x3708
movq -0x90(%rbp), %rax
movl 0x44(%rax), %esi
movq %rsi, -0x38(%rbp)
movl 0x8(%rbx), %r8d
movl 0x48(%rax), %r9d
xorl %edi, %edi
movl $0x3, %edx
movl $0x1, %ecx
callq 0x21d0
movq %rax, -0x40(%rbp)
cmpq $-0x1, %rax
je 0x370d
movq 0x28(%rbx), %rsi
cmpq 0x30(%rbx), %rsi
je 0x3697
movaps -0x50(%rbp), %xmm0
movaps -0x40(%rbp), %xmm1
movups %xmm1, 0x10(%rsi)
movups %xmm0, (%rsi)
addq $0x20, 0x28(%rbx)
jmp 0x36a4
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0x3c3a
movq 0x88(%rbx), %rcx
movq 0x98(%rbx), %rax
addq $-0x4, %rax
cmpq %rax, %rcx
xorps %xmm0, %xmm0
je 0x36d0
movl -0x2c(%rbp), %eax
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x88(%rbx)
jmp 0x36e3
movq -0x58(%rbp), %rdi
leaq -0x2c(%rbp), %rsi
callq 0x3d92
xorps %xmm0, %xmm0
movl -0x2c(%rbp), %eax
incl %eax
movl %eax, -0x2c(%rbp)
cmpl -0x74(%rbp), %eax
jb 0x35a8
addq $0x2a8, %rsp            # imm = 0x2A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x25e5
callq 0x25af
callq 0x2579
callq 0x2651
callq 0x261b