rtmp: make C_RTMP.m_vecChannelsOut a []*C_RTMPPacket

This commit is contained in:
Dan Kortschak 2018-09-12 16:57:54 +09:30
parent 0c124eb761
commit b45f70bdf8
2 changed files with 18 additions and 27 deletions

View File

@ -1500,35 +1500,30 @@ func C_HandShake(r *C_RTMP, FP9HandShake int32) (ok bool) {
func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) (ok bool) {
var prevPacket *C_RTMPPacket
last := 0
var nSize, hSize, cSize, nChunkSize int
var header, hptr, hend, buffer, tbuf, toff unsafe.Pointer
var goHbuf [RTMP_MAX_HEADER_SIZE]byte
var hbuf = unsafe.Pointer(&goHbuf[0])
var c byte
var t uint32
var packets unsafe.Pointer
if packet.m_nChannel >= r.m_channelsAllocatedOut {
n := int(packet.m_nChannel + 10)
packets = C.realloc(unsafe.Pointer(r.m_vecChannelsOut), C.size_t(
unsafe.Sizeof(packet)*uintptr(n)))
if uintptr(packets) == uintptr(0) {
//C.free(unsafe.Pointer(r.m_vecChannelsOut))
r.m_vecChannelsOut = nil
r.m_channelsAllocatedOut = 0
return false
var packets []*C_RTMPPacket
if r.m_vecChannelsOut == nil {
packets = make([]*C_RTMPPacket, n)
} else {
packets = append(r.m_vecChannelsOut[:packet.m_nChannel:packet.m_nChannel], make([]*C_RTMPPacket, 10)...)
}
r.m_vecChannelsOut = (**C_RTMPPacket)(packets)
r.m_vecChannelsOut = packets
memset((*byte)(incPtr(unsafe.Pointer(r.m_vecChannelsOut), int(r.m_channelsAllocatedOut),
int(unsafe.Sizeof(packet)))), 0, int(unsafe.Sizeof(packet)*
uintptr(n-int(r.m_channelsAllocatedOut))))
for i := int(r.m_channelsAllocatedOut); i < n; i++ {
r.m_vecChannelsOut[i] = nil
}
r.m_channelsAllocatedOut = int32(n)
}
prevPacket = *(**C_RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
int(packet.m_nChannel), int(unsafe.Sizeof(packet))))
prevPacket = r.m_vecChannelsOut[packet.m_nChannel]
if prevPacket != nil && packet.m_headerType != RTMP_PACKET_SIZE_LARGE {
// compress a bit by using the prev packet's attributes
@ -1553,9 +1548,9 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) (ok bool) {
return false
}
nSize = packetSize[int(packet.m_headerType)]
hSize = nSize
cSize = 0
nSize := packetSize[int(packet.m_headerType)]
hSize := nSize
cSize := 0
t = uint32(int(packet.m_nTimeStamp) - last)
if packet.m_body != nil {
@ -1635,7 +1630,7 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) (ok bool) {
nSize = int(packet.m_nBodySize)
buffer = unsafe.Pointer(packet.m_body)
nChunkSize = int(r.m_outChunkSize)
nChunkSize := int(r.m_outChunkSize)
if debugMode {
log.Printf("C_RTMP_SendPacket: fd=%v, size=%v", r.m_sb.sb_socket, nSize)
@ -1721,15 +1716,11 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) (ok bool) {
}
}
if *(**C_RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) == nil {
*(**C_RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) = (*C_RTMPPacket)(malloc(unsafe.Sizeof(*packet)))
if r.m_vecChannelsOut[packet.m_nChannel] == nil {
r.m_vecChannelsOut[packet.m_nChannel] = &C_RTMPPacket{}
}
*(r.m_vecChannelsOut[packet.m_nChannel]) = *packet
memmove(unsafe.Pointer(*(**C_RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
int(packet.m_nChannel), int(unsafe.Sizeof(packet))))), unsafe.Pointer(packet), unsafe.Sizeof(*packet))
return true
}

View File

@ -203,7 +203,7 @@ type C_RTMP struct {
m_channelsAllocatedIn int32
m_channelsAllocatedOut int32
m_vecChannelsIn []*C_RTMPPacket
m_vecChannelsOut **C_RTMPPacket
m_vecChannelsOut []*C_RTMPPacket
m_channelTimestamp []int32
m_fAudioCodecs float64
m_fVideoCodecs float64