mirror of
				https://github.com/asticode/go-astiav.git
				synced 2025-10-31 19:43:10 +08:00 
			
		
		
		
	Packet FromData() now handles empty data
This commit is contained in:
		
							
								
								
									
										21
									
								
								packet.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								packet.go
									
									
									
									
									
								
							| @@ -136,14 +136,27 @@ func (p *Packet) RescaleTs(src, dst Rational) { | ||||
| 	C.av_packet_rescale_ts(p.c, src.c, dst.c) | ||||
| } | ||||
|  | ||||
| func (p *Packet) FromData(data []byte) error { | ||||
| func (p *Packet) FromData(data []byte) (err error) { | ||||
| 	// Create buf | ||||
| 	buf := (*C.uint8_t)(C.av_malloc(C.size_t(len(data)))) | ||||
| 	if buf == nil { | ||||
| 		return errors.New("astiav: allocating buffer failed") | ||||
| 		err = errors.New("astiav: allocating buffer failed") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// Make sure to free buf in case of error | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			C.av_freep(unsafe.Pointer(&buf)) | ||||
| 		} | ||||
| 	}() | ||||
|  | ||||
| 	// Copy | ||||
| 	if len(data) > 0 { | ||||
| 		C.memcpy(unsafe.Pointer(buf), unsafe.Pointer(&data[0]), C.size_t(len(data))) | ||||
| 	} | ||||
| 	C.memcpy(unsafe.Pointer(buf), unsafe.Pointer(&data[0]), C.size_t(len(data))) | ||||
|  | ||||
| 	// From data | ||||
| 	return newError(C.av_packet_from_data(p.c, buf, C.int(len(data)))) | ||||
| 	err = newError(C.av_packet_from_data(p.c, buf, C.int(len(data)))) | ||||
| 	return | ||||
| } | ||||
|   | ||||
| @@ -107,4 +107,11 @@ func TestPacket(t *testing.T) { | ||||
| 	b = []byte{1, 2, 3, 4} | ||||
| 	require.NoError(t, pkt5.AddSideData(astiav.PacketSideDataTypeAudioServiceType, b)) | ||||
| 	require.Equal(t, b, pkt5.SideData(astiav.PacketSideDataTypeAudioServiceType)) | ||||
|  | ||||
| 	pkt6 := astiav.AllocPacket() | ||||
| 	require.NotNil(t, pkt6) | ||||
| 	defer pkt6.Free() | ||||
| 	b = []byte{} | ||||
| 	require.NoError(t, pkt6.FromData(b)) | ||||
| 	require.Equal(t, b, pkt6.Data()) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Quentin Renard
					Quentin Renard