mirror of https://bitbucket.org/ausocean/av.git
Added more specific decrement functions
This commit is contained in:
parent
d1362d659f
commit
376a694cd9
65
rtmp/rtmp.go
65
rtmp/rtmp.go
|
@ -87,6 +87,8 @@ func AVC(str string) C.AVal {
|
|||
// av_setDataFrame is a static const global in rtmp.c
|
||||
var setDataFrame = AVC("@setDataFrame")
|
||||
|
||||
var packetSize = [...]int32{ 12, 8, 4, 1}
|
||||
|
||||
// Session provides an interface for sending flv tags over rtmp.
|
||||
type Session interface {
|
||||
Open() error
|
||||
|
@ -263,21 +265,24 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
|
||||
if packet.m_nChannel >= r.m_channelsAllocatedOut {
|
||||
n := int(packet.m_nChannel+10)
|
||||
packets := C.realloc(r.m_vecChannelsOut, unsafe.Sizeof(*C.RTMPPacket) * n)
|
||||
var tmp *C.RTMPPacket
|
||||
packets := C.realloc(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
C.ulong(unsafe.Sizeof(tmp) * uintptr(n)))
|
||||
|
||||
if packets == 0 {
|
||||
C.free(r.m_vecChannelsOut)
|
||||
if uintptr(packets) == uintptr(0) {
|
||||
C.free(unsafe.Pointer(r.m_vecChannelsOut))
|
||||
r.m_vecChannelsOut = nil
|
||||
r.m_channelsAllocatedOut = 0
|
||||
return 0
|
||||
}
|
||||
r.m_vecChannelsOut = packets
|
||||
C.memset(r.m_vecChannelsOut + r.m_channelsAllocatedOut, 0,
|
||||
unsafe.Sizeof(*RTMPPacket) * (n-r.m_channelsAllocatedOut))
|
||||
r.m_channelsAllocatedOut = n
|
||||
r.m_vecChannelsOut = (**C.RTMPPacket)(packets)
|
||||
C.memset(incPtr(unsafe.Pointer(r.m_vecChannelsOut), int(r.m_channelsAllocatedOut),
|
||||
int(unsafe.Sizeof(tmp))), 0, C.ulong(unsafe.Sizeof(tmp) *
|
||||
uintptr(n-int(r.m_channelsAllocatedOut))))
|
||||
r.m_channelsAllocatedOut = C.int(n)
|
||||
}
|
||||
prevPackt = *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
packet.m_nChannel))
|
||||
prevPacket = *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet))))
|
||||
|
||||
if prevPacket != nil && packet.m_headerType != RTMP_PACKET_SIZE_LARGE {
|
||||
// compress a bit by using the prev packet's attributes
|
||||
|
@ -290,11 +295,11 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
|
||||
if prevPacket.m_nTimeStamp == packet.m_nTimeStamp &&
|
||||
packet.m_headerType == RTMP_PACKET_SIZE_SMALL {
|
||||
|
||||
packet.m_headerType = RTMP_PACKET_SIZE_MINIMUM
|
||||
// TODO: port this constant
|
||||
packet.m_headerType = C.RTMP_PACKET_SIZE_MINIMUM
|
||||
}
|
||||
|
||||
last = prevPacket.m_nTimeStamp
|
||||
last = int(prevPacket.m_nTimeStamp)
|
||||
}
|
||||
|
||||
if packet.m_headerType > 3 {
|
||||
|
@ -303,13 +308,13 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
return 0
|
||||
}
|
||||
|
||||
nSize = int(*(*int)(incPtr(unsafe.Pointer(packetSize),int(packet.m_headerType))))
|
||||
nSize = int(*(*int)(incInt32Ptr(unsafe.Pointer(&packetSize[0]),int(packet.m_headerType))))
|
||||
hSize = nSize
|
||||
cSize = 0
|
||||
t = packet.m_nTimeStamp - last
|
||||
t = int32(int(packet.m_nTimeStamp) - last)
|
||||
|
||||
if packet.m_body {
|
||||
header = packet.m_body - nSize
|
||||
if packet.m_body != nil {
|
||||
header = decPtr(unsafe.Pointer(packet.m_body), nSize,
|
||||
hend = packet.m_body
|
||||
} else {
|
||||
header = incPtr(hbuf,6)
|
||||
|
@ -572,20 +577,20 @@ func indxInt64Ptr(ptr unsafe.Pointer, inc int) int64 {
|
|||
return *(*int64)(incPtr(ptr, inc, int64Size))
|
||||
}
|
||||
|
||||
// incBytePtr returns an unsafe.Pointer to a byte that is inc positions
|
||||
// incBytePtr returns an unsafe.Pointer to a byte that is inc positive positions
|
||||
// from the passed ptr
|
||||
func incBytePtr(ptr unsafe.Pointer, inc int) unsafe.Pointer {
|
||||
return incPtr(ptr,inc,byteSize)
|
||||
}
|
||||
|
||||
// incInt32Ptr returns an unsafe.Pointer to an int32 that is inc positions from
|
||||
// the passed ptr
|
||||
// incInt32Ptr returns an unsafe.Pointer to an int32 that is inc positive
|
||||
// positions from the passed ptr
|
||||
func incInt32Ptr(ptr unsafe.Pointer, inc int) unsafe.Pointer {
|
||||
return incPtr(ptr,inc,int32Size)
|
||||
}
|
||||
|
||||
// incInt64Ptr returns an unsafe.Pointer to an int64 that is inc positions from
|
||||
// the passed ptr
|
||||
// incInt64Ptr returns an unsafe.Pointer to an int64 that is inc positive
|
||||
// positions from the passed ptr
|
||||
func incInt64Ptr(ptr unsafe.Pointer, inc int) unsafe.Pointer {
|
||||
return incPtr(ptr,inc,int64Size)
|
||||
}
|
||||
|
@ -600,6 +605,24 @@ func decPtr(ptr unsafe.Pointer, dec, typeSize int) unsafe.Pointer {
|
|||
return unsafe.Pointer(uintptr(ptr) - uintptr(dec*typeSize))
|
||||
}
|
||||
|
||||
// decBytePtr returns an unsafe.Pointer to a byte that is dec negative positions
|
||||
// from ptr
|
||||
func decBytePtr(ptr unsafe.Pointer, dec int) unsafe.Pointer {
|
||||
return decPtr(ptr,dec,byteSize)
|
||||
}
|
||||
|
||||
// decBytePtr returns an unsafe.Pointer to a int32 that is dec negative positions
|
||||
// from ptr
|
||||
func decInt32Ptr(ptr unsafe.Pointer, dec int) unsafe.Pointer {
|
||||
return decPtr(ptr,dec,int32Size)
|
||||
}
|
||||
|
||||
// decBytePtr returns an unsafe.Pointer to a int64 that is dec negative positions
|
||||
// from ptr
|
||||
func decInt64Ptr(ptr unsafe.Pointer, dec int) unsafe.Pointer {
|
||||
return decPTr(ptr,dec,int64Size)
|
||||
}
|
||||
|
||||
// sliceToPtr get's the address of the first data element and returns as unsafe
|
||||
// pointer
|
||||
func sliceToPtr(data []byte) unsafe.Pointer {
|
||||
|
|
Loading…
Reference in New Issue