FFMpeg custom io vb.net
Апи: vb.net
Public Delegate Function d_avio_alloc_context(ByVal buffer As IntPtr, ByVal buffer_size As Int32, ByVal write_flag As Int32, ByVal opaque As IntPtr, ByVal read_packet As d_av_read_function_callback, ByVal write_packet As d_av_write_function_callback, ByVal seek As d_av_seek_function) As IntPtr
Public Shared avio_alloc_context As d_avio_alloc_context = Nothing
<UnmanagedFunctionPointer(CallingConvention.Cdecl)>
Public Delegate Function d_av_read_function_callback(ByVal opaque As IntPtr, ByVal buf As IntPtr, ByVal bufSize As Int32) As Int32
<UnmanagedFunctionPointer(CallingConvention.Cdecl)>
Public Delegate Function d_av_write_function_callback(ByVal opaque As IntPtr, ByVal buf As IntPtr, ByVal bufSize As Int32) As Int32
<UnmanagedFunctionPointer(CallingConvention.Cdecl)>
Public Delegate Function d_av_seek_function(ByVal opaque As IntPtr, ByVal offset As Int64, ByVal whence As Int32) As Int64
Функция читающая память: vb.net
Private Function Read_Packet(ByVal opaque As IntPtr, ByVal buf As IntPtr, ByVal bufSize As Int32) As Int32
Dim bd As sBufferdata = New sBufferdata(opaque)
Dim file_length As Int32 = bd.Lenght
Dim read_offset As Int32 = bd.Read_Position
Dim ex_length As Int32 = (file_length - read_offset)
If (ex_length > 0) Then
Dim ptr As IntPtr = New IntPtr(bd.Data.ToInt32 + read_offset)
If (ex_length >= bufSize) Then
StructureHelper.CopyMemory(buf, ptr, bufSize) 'memcp
bd.Read_Position = (read_offset + bufSize)
Return bufSize
Else
StructureHelper.CopyMemory(buf, ptr, ex_length) 'memcp
bd.Read_Position = (read_offset + ex_length)
Return ex_length
End If
Else
Return -1
End If
End Function
Создаю контекст так: vb.net
Me.io_buffer = Marshal.AllocHGlobal(IO_Buffer_Size) 'Marshal.AllocHGlobal(IO_Buffer_Size)
Me.io_context = avio_alloc_context.Invoke(Me.io_buffer, IO_Buffer_Size, 0, Me.file.ptr, AddressOf Me.Read_Packet, Nothing, Nothing)
При любых действиях и модификациях получаю "System.AccessViolationException". Однако, если не читать из памяти, а создать из файла проблем нет, нормально конвертирует аудио и видео. Приму любую помощь.