mirror of
https://github.com/asticode/go-astiav.git
synced 2025-10-06 08:37:06 +08:00
Replaced cULong/cLong with C.size_t/C.ptrdiff_t
This commit is contained in:
9
Makefile
9
Makefile
@@ -1,6 +1,7 @@
|
|||||||
version = "n5.1.2"
|
version = "n5.1.2"
|
||||||
srcPath = "tmp/$(version)/src"
|
srcPath = "tmp/$(version)/src"
|
||||||
postCheckout = ""
|
postCheckout = ""
|
||||||
|
platform = ""
|
||||||
|
|
||||||
generate-flags:
|
generate-flags:
|
||||||
go run internal/cmd/flags/main.go
|
go run internal/cmd/flags/main.go
|
||||||
@@ -18,3 +19,11 @@ install-ffmpeg:
|
|||||||
coverage:
|
coverage:
|
||||||
go test -coverprofile=coverage.out
|
go test -coverprofile=coverage.out
|
||||||
go tool cover -html=coverage.out
|
go tool cover -html=coverage.out
|
||||||
|
|
||||||
|
test-platform-build:
|
||||||
|
docker build -t astiav/$(platform) ./testdata/docker/$(platform)
|
||||||
|
|
||||||
|
test-platform-run:
|
||||||
|
mkdir -p ./testdata/docker/$(platform)/tmp/gocache
|
||||||
|
mkdir -p ./testdata/docker/$(platform)/tmp/gomodcache
|
||||||
|
docker run -v .:/opt/astiav -v ./testdata/docker/$(platform)/tmp/gocache:/opt/gocache -v ./testdata/docker/$(platform)/tmp/gomodcache:/opt/gomodcache astiav/$(platform)
|
||||||
|
@@ -1,8 +0,0 @@
|
|||||||
//go:build !windows
|
|
||||||
|
|
||||||
package astiav
|
|
||||||
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
type cLong = C.long
|
|
||||||
type cUlong = C.ulong
|
|
@@ -1,8 +0,0 @@
|
|||||||
//go:build windows
|
|
||||||
|
|
||||||
package astiav
|
|
||||||
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
type cLong = C.longlong
|
|
||||||
type cUlong = C.ulonglong
|
|
8
bytes.go
8
bytes.go
@@ -21,18 +21,18 @@ func stringFromC(len int, fn func(buf *C.char, size C.size_t) error) (string, er
|
|||||||
return C.GoString(buf), nil
|
return C.GoString(buf), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func bytesFromC(fn func(size *cUlong) *C.uint8_t) []byte {
|
func bytesFromC(fn func(size *C.size_t) *C.uint8_t) []byte {
|
||||||
var size uint64
|
var size uint64
|
||||||
r := fn((*cUlong)(unsafe.Pointer(&size)))
|
r := fn((*C.size_t)(unsafe.Pointer(&size)))
|
||||||
return C.GoBytes(unsafe.Pointer(r), C.int(size))
|
return C.GoBytes(unsafe.Pointer(r), C.int(size))
|
||||||
}
|
}
|
||||||
|
|
||||||
func bytesToC(b []byte, fn func(b *C.uint8_t, size cUlong) error) error {
|
func bytesToC(b []byte, fn func(b *C.uint8_t, size C.size_t) error) error {
|
||||||
var ptr *C.uint8_t
|
var ptr *C.uint8_t
|
||||||
if b != nil {
|
if b != nil {
|
||||||
c := make([]byte, len(b))
|
c := make([]byte, len(b))
|
||||||
copy(c, b)
|
copy(c, b)
|
||||||
ptr = (*C.uint8_t)(unsafe.Pointer(&c[0]))
|
ptr = (*C.uint8_t)(unsafe.Pointer(&c[0]))
|
||||||
}
|
}
|
||||||
return fn(ptr, cUlong(len(b)))
|
return fn(ptr, C.size_t(len(b)))
|
||||||
}
|
}
|
||||||
|
@@ -93,7 +93,7 @@ func (l ChannelLayout) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l ChannelLayout) Describe(b []byte) (int, error) {
|
func (l ChannelLayout) Describe(b []byte) (int, error) {
|
||||||
ret := C.av_channel_layout_describe(l.c, (*C.char)(unsafe.Pointer(&b[0])), cUlong(len(b)))
|
ret := C.av_channel_layout_describe(l.c, (*C.char)(unsafe.Pointer(&b[0])), C.size_t(len(b)))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return 0, newError(ret)
|
return 0, newError(ret)
|
||||||
}
|
}
|
||||||
|
@@ -61,13 +61,13 @@ func (d *Dictionary) Free() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dictionary) Pack() []byte {
|
func (d *Dictionary) Pack() []byte {
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
return C.av_packet_pack_dictionary(d.c, size)
|
return C.av_packet_pack_dictionary(d.c, size)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dictionary) Unpack(b []byte) error {
|
func (d *Dictionary) Unpack(b []byte) error {
|
||||||
return bytesToC(b, func(b *C.uint8_t, size cUlong) error {
|
return bytesToC(b, func(b *C.uint8_t, size C.size_t) error {
|
||||||
return newError(C.av_packet_unpack_dictionary(b, size, &d.c))
|
return newError(C.av_packet_unpack_dictionary(b, size, &d.c))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
6
frame.go
6
frame.go
@@ -99,9 +99,9 @@ func (f *Frame) ImageCopyToBuffer(b []byte, align int) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *Frame) ImageFillBlack() error {
|
func (f *Frame) ImageFillBlack() error {
|
||||||
linesize := [NumDataPointers]cLong{}
|
linesize := [NumDataPointers]C.ptrdiff_t{}
|
||||||
for i := 0; i < int(NumDataPointers); i++ {
|
for i := 0; i < int(NumDataPointers); i++ {
|
||||||
linesize[i] = cLong(f.c.linesize[i])
|
linesize[i] = C.ptrdiff_t(f.c.linesize[i])
|
||||||
}
|
}
|
||||||
return newError(C.av_image_fill_black(&f.c.data[0], &linesize[0], (C.enum_AVPixelFormat)(f.c.format), (C.enum_AVColorRange)(f.c.color_range), f.c.width, f.c.height))
|
return newError(C.av_image_fill_black(&f.c.data[0], &linesize[0], (C.enum_AVPixelFormat)(f.c.format), (C.enum_AVColorRange)(f.c.color_range), f.c.width, f.c.height))
|
||||||
}
|
}
|
||||||
@@ -175,7 +175,7 @@ func (f *Frame) SetSampleRate(r int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *Frame) NewSideData(t FrameSideDataType, size uint64) *FrameSideData {
|
func (f *Frame) NewSideData(t FrameSideDataType, size uint64) *FrameSideData {
|
||||||
return newFrameSideDataFromC(C.av_frame_new_side_data(f.c, (C.enum_AVFrameSideDataType)(t), cUlong(size)))
|
return newFrameSideDataFromC(C.av_frame_new_side_data(f.c, (C.enum_AVFrameSideDataType)(t), C.size_t(size)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Frame) SideData(t FrameSideDataType) *FrameSideData {
|
func (f *Frame) SideData(t FrameSideDataType) *FrameSideData {
|
||||||
|
@@ -196,8 +196,8 @@ func (f *frameDataFrame) pixelFormat() PixelFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *frameDataFrame) planeBytes(i int) []byte {
|
func (f *frameDataFrame) planeBytes(i int) []byte {
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
*size = cUlong(int(f.f.c.linesize[i]) * f.f.Height())
|
*size = C.size_t(int(f.f.c.linesize[i]) * f.f.Height())
|
||||||
return f.f.c.data[i]
|
return f.f.c.data[i]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@ func newFrameSideDataFromC(c *C.struct_AVFrameSideData) *FrameSideData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *FrameSideData) Data() []byte {
|
func (d *FrameSideData) Data() []byte {
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
*size = d.c.size
|
*size = d.c.size
|
||||||
return d.c.data
|
return d.c.data
|
||||||
})
|
})
|
||||||
|
@@ -28,8 +28,8 @@ func (p *Packet) Data() []byte {
|
|||||||
if p.c.data == nil {
|
if p.c.data == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
*size = cUlong(p.c.size)
|
*size = C.size_t(p.c.size)
|
||||||
return p.c.data
|
return p.c.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ func (p *Packet) AddSideData(t PacketSideDataType, data []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Packet) SideData(t PacketSideDataType) []byte {
|
func (p *Packet) SideData(t PacketSideDataType) []byte {
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
return C.av_packet_get_side_data(p.c, (C.enum_AVPacketSideDataType)(t), size)
|
return C.av_packet_get_side_data(p.c, (C.enum_AVPacketSideDataType)(t), size)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -81,7 +81,7 @@ func (s *Stream) SetSampleAspectRatio(r Rational) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Stream) SideData(t PacketSideDataType) []byte {
|
func (s *Stream) SideData(t PacketSideDataType) []byte {
|
||||||
return bytesFromC(func(size *cUlong) *C.uint8_t {
|
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||||
return C.av_stream_get_side_data(s.c, (C.enum_AVPacketSideDataType)(t), size)
|
return C.av_stream_get_side_data(s.c, (C.enum_AVPacketSideDataType)(t), size)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -91,12 +91,12 @@ func (s *Stream) AddSideData(t PacketSideDataType, d []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr := C.av_stream_new_side_data(s.c, (C.enum_AVPacketSideDataType)(t), cUlong(len(d)))
|
ptr := C.av_stream_new_side_data(s.c, (C.enum_AVPacketSideDataType)(t), C.size_t(len(d)))
|
||||||
if ptr == nil {
|
if ptr == nil {
|
||||||
return errors.New("astiav: nil pointer")
|
return errors.New("astiav: nil pointer")
|
||||||
}
|
}
|
||||||
|
|
||||||
C.memcpy(unsafe.Pointer(ptr), unsafe.Pointer(&d[0]), cUlong(len(d)))
|
C.memcpy(unsafe.Pointer(ptr), unsafe.Pointer(&d[0]), C.size_t(len(d)))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
testdata/docker/arm/7/Dockerfile
vendored
Normal file
38
testdata/docker/arm/7/Dockerfile
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
FROM arm32v7/debian:12.5
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
|
||||||
|
RUN apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
git \
|
||||||
|
pkg-config
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
mkdir -p /opt/ffmpeg/src
|
||||||
|
|
||||||
|
WORKDIR /opt/ffmpeg/src
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
git clone https://github.com/FFmpeg/FFmpeg /opt/ffmpeg/src && \
|
||||||
|
git checkout n5.1.2
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
./configure --prefix=.. && \
|
||||||
|
make && \
|
||||||
|
make install
|
||||||
|
|
||||||
|
ADD https://dl.google.com/go/go1.21.0.linux-amd64.tar.gz /tmp/go.tar.gz
|
||||||
|
RUN tar -C /opt -xzf /tmp/go.tar.gz
|
||||||
|
|
||||||
|
ENV GOARCH=arm
|
||||||
|
ENV GOARM=7
|
||||||
|
ENV GOCACHE=/opt/gocache
|
||||||
|
ENV GOMODCACHE=/opt/gomodcache
|
||||||
|
ENV CGO_LDFLAGS=-L/opt/ffmpeg/lib/
|
||||||
|
ENV CGO_CFLAGS=-I/opt/ffmpeg/include/
|
||||||
|
ENV PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig
|
||||||
|
ENV CGO_ENABLED=1
|
||||||
|
|
||||||
|
WORKDIR /opt/astiav
|
||||||
|
|
||||||
|
CMD ["/opt/go/bin/go", "test"]
|
Reference in New Issue
Block a user