rtmp: Implemented afmEncodeInt24

This commit is contained in:
Jake Lane 2018-07-20 10:23:40 +09:30
parent de4e673e94
commit 9c1c5cb601
1 changed files with 25 additions and 3 deletions

View File

@ -793,12 +793,11 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
if t > 0xffffff { if t > 0xffffff {
res = 0xffffff res = 0xffffff
} }
hptr = unsafe.Pointer(C.AMF_EncodeInt24((*C.char)(hptr), (*C.char)(hend), C.int(res))) hptr = unsafe.Pointer(afmEncodeInt24((*byte)(hptr), (*byte)(hend), res))
} }
if nSize > 4 { if nSize > 4 {
hptr = unsafe.Pointer(C.AMF_EncodeInt24((*C.char)(hptr), (*C.char)(hend), hptr = unsafe.Pointer(afmEncodeInt24((*byte)(hptr), (*byte)(hend), (int32(packet.m_nBodySize))))
C.int(packet.m_nBodySize)))
*(*byte)(hptr) = byte(packet.m_packetType) *(*byte)(hptr) = byte(packet.m_packetType)
hptr = incBytePtr(hptr, 1) hptr = incBytePtr(hptr, 1)
} }
@ -962,6 +961,29 @@ func afmDecodeInt16(data *byte) uint16 {
return (uint16(*(*uint8)(c)) << 8) | *(*uint16)(incBytePtr(c, 1)) return (uint16(*(*uint8)(c)) << 8) | *(*uint16)(incBytePtr(c, 1))
} }
// afmEncodeInt24 encodes a int24 into data
func afmEncodeInt24(output *byte, outend *byte, nVal int32) *byte {
outputPtr := unsafe.Pointer(output)
outendPtr := unsafe.Pointer(outend)
if uintptr(outputPtr)+3 > uintptr(outendPtr) {
// length < 3
return nil
}
// Assign output[2]
third := (*byte)(incBytePtr(outputPtr, 2))
*third = (byte)(nVal & 0xff)
// Assign output[1]
second := (*byte)(incBytePtr(outputPtr, 1))
*second = (byte)(nVal >> 8)
// Assign output[0]
*output = (byte)(nVal >> 16)
return (*byte)(incBytePtr(outputPtr, 3))
}
func writeN(r *C.RTMP, buffer unsafe.Pointer, n int) int { func writeN(r *C.RTMP, buffer unsafe.Pointer, n int) int {
ptr := buffer ptr := buffer
for n > 0 { for n > 0 {