mirror of
https://github.com/giorgisio/goav.git
synced 2026-10-19 16:14:41 +00:00
go receivers; formatting; and restructuring
This commit is contained in:
+28
-53
@@ -67,6 +67,34 @@ func (c *Codec) AvCodecNext() *Codec {
|
||||
return (*Codec)(C.av_codec_next((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
//Register the codec codec and initialize libavcodec.
|
||||
func (c *Codec) AvcodecRegister() {
|
||||
C.avcodec_register((*C.struct_AVCodec)(c))
|
||||
}
|
||||
|
||||
//Return a name for the specified profile, if available.
|
||||
func (c *Codec) AvGetProfileName(p int) string {
|
||||
return C.GoString(C.av_get_profile_name((*C.struct_AVCodec)(c), C.int(p)))
|
||||
}
|
||||
|
||||
//Allocate an Context and set its fields to default values.
|
||||
func (c *Codec) AvcodecAllocContext3() *Context {
|
||||
return (*Context)(C.avcodec_alloc_context3((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
func (c *Codec) AvCodecIsEncoder() int {
|
||||
return int(C.av_codec_is_encoder((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
func (c *Codec) AvCodecIsDecoder() int {
|
||||
return int(C.av_codec_is_decoder((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
//Same behaviour av_fast_malloc but the buffer has additional FF_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
|
||||
func AvFastPaddedMalloc(p unsafe.Pointer, s *uint, t uintptr) {
|
||||
C.av_fast_padded_malloc(p, (*C.uint)(unsafe.Pointer(s)), (C.size_t)(t))
|
||||
}
|
||||
|
||||
//Return the LIBAvCODEC_VERSION_INT constant.
|
||||
func AvcodecVersion() uint {
|
||||
return uint(C.avcodec_version())
|
||||
@@ -83,21 +111,11 @@ func AvcodecLicense() string {
|
||||
return C.GoString(C.avcodec_license())
|
||||
}
|
||||
|
||||
//Register the codec codec and initialize libavcodec.
|
||||
func (c *Codec) AvcodecRegister() {
|
||||
C.avcodec_register((*C.struct_AVCodec)(c))
|
||||
}
|
||||
|
||||
//Register all the codecs, parsers and bitstream filters which were enabled at configuration time.
|
||||
func AvcodecRegisterAll() {
|
||||
C.avcodec_register_all()
|
||||
}
|
||||
|
||||
//Allocate an Context and set its fields to default values.
|
||||
func (c *Codec) AvcodecAllocContext3() *Context {
|
||||
return (*Context)(C.avcodec_alloc_context3((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
//Get the Class for Context.
|
||||
func AvcodecGetClass() *Class {
|
||||
return (*Class)(C.avcodec_get_class())
|
||||
@@ -167,11 +185,6 @@ func AvcodecString(b string, bs int, ctxt *Context, e int) {
|
||||
C.avcodec_string(C.CString(b), C.int(bs), (*C.struct_AVCodecContext)(ctxt), C.int(e))
|
||||
}
|
||||
|
||||
//Return a name for the specified profile, if available.
|
||||
func (c *Codec) AvGetProfileName(p int) string {
|
||||
return C.GoString(C.av_get_profile_name((*C.struct_AVCodec)(c), C.int(p)))
|
||||
}
|
||||
|
||||
//Fill Frame audio data and linesize pointers.
|
||||
func AvcodecFillAudioFrame(f *Frame, c int, s AvSampleFormat, b *uint8, bs, a int) int {
|
||||
return int(C.avcodec_fill_audio_frame((*C.struct_AVFrame)(f), C.int(c), (C.enum_AVSampleFormat)(s), (*C.uint8_t)(b), C.int(bs), C.int(a)))
|
||||
@@ -192,36 +205,6 @@ func AvGetExactBitsPerSample(c CodecId) int {
|
||||
return int(C.av_get_exact_bits_per_sample((C.enum_AVCodecID)(c)))
|
||||
}
|
||||
|
||||
//Register a bitstream filter.
|
||||
func (b *BitStreamFilter) AvRegisterBitstreamFilter() {
|
||||
C.av_register_bitstream_filter((*C.struct_AVBitStreamFilter)(b))
|
||||
}
|
||||
|
||||
//Create and initialize a bitstream filter context given a bitstream filter name.
|
||||
func AvBitstreamFilterInit(n string) *BitStreamFilterContext {
|
||||
return (*BitStreamFilterContext)(C.av_bitstream_filter_init(C.CString(n)))
|
||||
}
|
||||
|
||||
//Filter bitstream.
|
||||
func (bfx *BitStreamFilterContext) AvBitstreamFilterFilter(ctxt *Context, a string, p **uint8, ps *int, b *uint8, bs, k int) int {
|
||||
return int(C.av_bitstream_filter_filter((*C.struct_AVBitStreamFilterContext)(bfx), (*C.struct_AVCodecContext)(ctxt), C.CString(a), (**C.uint8_t)(unsafe.Pointer(p)), (*C.int)(unsafe.Pointer(ps)), (*C.uint8_t)(b), C.int(bs), C.int(k)))
|
||||
}
|
||||
|
||||
//Release bitstream filter context.
|
||||
func (bfx *BitStreamFilterContext) AvBitstreamFilterClose() {
|
||||
C.av_bitstream_filter_close((*C.struct_AVBitStreamFilterContext)(bfx))
|
||||
}
|
||||
|
||||
//BitStreamFilter *av_bitstream_filter_next (const BitStreamFilter *f)
|
||||
func (f *BitStreamFilter) AvBitstreamFilterNext() *BitStreamFilter {
|
||||
return (*BitStreamFilter)(C.av_bitstream_filter_next((*C.struct_AVBitStreamFilter)(f)))
|
||||
}
|
||||
|
||||
//Same behaviour av_fast_malloc but the buffer has additional FF_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
|
||||
func AvFastPaddedMalloc(p unsafe.Pointer, s *uint, t uintptr) {
|
||||
C.av_fast_padded_malloc(p, (*C.uint)(unsafe.Pointer(s)), (C.size_t)(t))
|
||||
}
|
||||
|
||||
//Same behaviour av_fast_padded_malloc except that buffer will always be 0-initialized after call.
|
||||
func AvFastPaddedMallocz(p unsafe.Pointer, s *uint, t uintptr) {
|
||||
C.av_fast_padded_mallocz(p, (*C.uint)(unsafe.Pointer(s)), (C.size_t)(t))
|
||||
@@ -248,14 +231,6 @@ func AvcodecGetName(d CodecId) string {
|
||||
return C.GoString(C.avcodec_get_name((C.enum_AVCodecID)(d)))
|
||||
}
|
||||
|
||||
func (c *Codec) AvCodecIsEncoder() int {
|
||||
return int(C.av_codec_is_encoder((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
func (c *Codec) AvCodecIsDecoder() int {
|
||||
return int(C.av_codec_is_decoder((*C.struct_AVCodec)(c)))
|
||||
}
|
||||
|
||||
//const Descriptor *avcodec_descriptor_get (enum CodecId id)
|
||||
func AvcodecDescriptorGet(id CodecId) *Descriptor {
|
||||
return (*Descriptor)(C.avcodec_descriptor_get((C.enum_AVCodecID)(id)))
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
AvPicture
|
||||
*/
|
||||
package avcodec
|
||||
|
||||
//#cgo pkg-config: libavcodec
|
||||
//#include <libavcodec/avcodec.h>
|
||||
import "C"
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//Register a bitstream filter.
|
||||
func (b *BitStreamFilter) AvRegisterBitstreamFilter() {
|
||||
C.av_register_bitstream_filter((*C.struct_AVBitStreamFilter)(b))
|
||||
}
|
||||
|
||||
//BitStreamFilter *av_bitstream_filter_next (const BitStreamFilter *f)
|
||||
func (f *BitStreamFilter) AvBitstreamFilterNext() *BitStreamFilter {
|
||||
return (*BitStreamFilter)(C.av_bitstream_filter_next((*C.struct_AVBitStreamFilter)(f)))
|
||||
}
|
||||
|
||||
//Filter bitstream.
|
||||
func (bfx *BitStreamFilterContext) AvBitstreamFilterFilter(ctxt *Context, a string, p **uint8, ps *int, b *uint8, bs, k int) int {
|
||||
return int(C.av_bitstream_filter_filter((*C.struct_AVBitStreamFilterContext)(bfx), (*C.struct_AVCodecContext)(ctxt), C.CString(a), (**C.uint8_t)(unsafe.Pointer(p)), (*C.int)(unsafe.Pointer(ps)), (*C.uint8_t)(b), C.int(bs), C.int(k)))
|
||||
}
|
||||
|
||||
//Release bitstream filter context.
|
||||
func (bfx *BitStreamFilterContext) AvBitstreamFilterClose() {
|
||||
C.av_bitstream_filter_close((*C.struct_AVBitStreamFilterContext)(bfx))
|
||||
}
|
||||
|
||||
//Create and initialize a bitstream filter context given a bitstream filter name.
|
||||
func AvBitstreamFilterInit(n string) *BitStreamFilterContext {
|
||||
return (*BitStreamFilterContext)(C.av_bitstream_filter_init(C.CString(n)))
|
||||
}
|
||||
@@ -32,84 +32,50 @@ type (
|
||||
)
|
||||
|
||||
//unsigned avdevice_version (void)
|
||||
//Return the LIBAvDEVICE_VERSION_INT constant.
|
||||
func Avdevice_version() uint {
|
||||
return uint(C.avdevice_version())
|
||||
}
|
||||
|
||||
//const char * avdevice_configuration (void)
|
||||
//Return the libavdevice build-time configuration.
|
||||
func Avdevice_configuration() string {
|
||||
return C.GoString(C.avdevice_configuration())
|
||||
}
|
||||
|
||||
//const char * avdevice_license (void)
|
||||
//Return the libavdevice license.
|
||||
func Avdevice_license() string {
|
||||
return C.GoString(C.avdevice_license())
|
||||
}
|
||||
|
||||
//void avdevice_register_all (void)
|
||||
//Initialize libavdevice and register all the input and output devices.
|
||||
func Avdevice_register_all() {
|
||||
C.avdevice_register_all()
|
||||
}
|
||||
|
||||
//InputFormat * av_input_audio_device_next (InputFormat *d)
|
||||
//Audio input devices iterator.
|
||||
func Av_input_audio_device_next(d *InputFormat) *InputFormat {
|
||||
return (*InputFormat)(C.av_input_audio_device_next((*C.struct_AVInputFormat)(d)))
|
||||
}
|
||||
|
||||
//InputFormat * av_input_video_device_next (InputFormat *d)
|
||||
//Video input devices iterator.
|
||||
func Av_input_video_device_next(d *InputFormat) *InputFormat {
|
||||
return (*InputFormat)(C.av_input_video_device_next((*C.struct_AVInputFormat)(d)))
|
||||
}
|
||||
|
||||
//OutputFormat * av_output_audio_device_next (OutputFormat *d)
|
||||
//Audio output devices iterator.
|
||||
func Av_output_audio_device_next(d *OutputFormat) *OutputFormat {
|
||||
return (*OutputFormat)(C.av_output_audio_device_next((*C.struct_AVOutputFormat)(d)))
|
||||
}
|
||||
|
||||
//OutputFormat * av_output_video_device_next (OutputFormat *d)
|
||||
//Video output devices iterator.
|
||||
func Av_output_video_device_next(d *OutputFormat) *OutputFormat {
|
||||
return (*OutputFormat)(C.av_output_video_device_next((*C.struct_AVOutputFormat)(d)))
|
||||
}
|
||||
|
||||
//int avdevice_app_to_dev_control_message (struct AvFormatContext *s, enum AvAppToDevMessageType type, void *data, size_t data_size)
|
||||
//Send control message from application to device.
|
||||
func Avdevice_app_to_dev_control_message(s *AvFormatContext, m AvAppToDevMessageType, da int, d uintptr) int {
|
||||
return int(C.avdevice_app_to_dev_control_message((*C.struct_AVFormatContext)(s), (C.enum_AVAppToDevMessageType)(m), unsafe.Pointer(&da), C.size_t(d)))
|
||||
}
|
||||
|
||||
//int avdevice_dev_to_app_control_message (struct AvFormatContext *s, enum AvDevToAppMessageType type, void *data, size_t data_size)
|
||||
//Send control message from device to application.
|
||||
func Avdevice_dev_to_app_control_message(fcxt *AvFormatContext, m AvDevToAppMessageType, da int, d uintptr) int {
|
||||
return int(C.avdevice_dev_to_app_control_message((*C.struct_AVFormatContext)(fcxt), (C.enum_AVDevToAppMessageType)(m), unsafe.Pointer(&da), C.size_t(d)))
|
||||
}
|
||||
|
||||
//int avdevice_capabilities_create (AvDeviceCapabilitiesQuery **caps, AvFormatContext *s, Dictionary **device_options)
|
||||
//Initialize capabilities probing API based on AvOption API.
|
||||
func Avdevice_capabilities_create(c **AvDeviceCapabilitiesQuery, s *AvFormatContext, d **Dictionary) int {
|
||||
return int(C.avdevice_capabilities_create((**C.struct_AVDeviceCapabilitiesQuery)(unsafe.Pointer(c)), (*C.struct_AVFormatContext)(s), (**C.struct_AVDictionary)(unsafe.Pointer(d))))
|
||||
}
|
||||
|
||||
//void avdevice_capabilities_free (AvDeviceCapabilitiesQuery **caps, AvFormatContext *s)
|
||||
//Free resources created by avdevice_capabilities_create()
|
||||
func Avdevice_capabilities_free(c **AvDeviceCapabilitiesQuery, s *AvFormatContext) {
|
||||
C.avdevice_capabilities_free((**C.struct_AVDeviceCapabilitiesQuery)(unsafe.Pointer(c)), (*C.struct_AVFormatContext)(s))
|
||||
}
|
||||
|
||||
//int avdevice_list_devices (struct AvFormatContext *s, AvDeviceInfoList **device_list)
|
||||
//List devices.
|
||||
func Avdevice_list_devices(s *AvFormatContext, d **AvDeviceInfoList) int {
|
||||
return int(C.avdevice_list_devices((*C.struct_AVFormatContext)(s), (**C.struct_AVDeviceInfoList)(unsafe.Pointer(d))))
|
||||
}
|
||||
|
||||
//void avdevice_free_list_devices (AvDeviceInfoList **device_list)
|
||||
//Convenient function to free result of avdevice_list_devices().
|
||||
func Avdevice_free_list_devices(d **AvDeviceInfoList) {
|
||||
C.avdevice_free_list_devices((**C.struct_AVDeviceInfoList)(unsafe.Pointer(d)))
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Format
|
||||
*/
|
||||
package avdevice
|
||||
|
||||
/*
|
||||
#cgo pkg-config: libavdevice
|
||||
#include <libavdevice/avdevice.h>
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//Audio input devices iterator.
|
||||
func (d *InputFormat) Av_input_audio_device_next() *InputFormat {
|
||||
return (*InputFormat)(C.av_input_audio_device_next((*C.struct_AVInputFormat)(d)))
|
||||
}
|
||||
|
||||
//Video input devices iterator.
|
||||
func (d *InputFormat) Av_input_video_device_next() *InputFormat {
|
||||
return (*InputFormat)(C.av_input_video_device_next((*C.struct_AVInputFormat)(d)))
|
||||
}
|
||||
|
||||
//Audio output devices iterator.
|
||||
func (d *OutputFormat) Av_output_audio_device_next() *OutputFormat {
|
||||
return (*OutputFormat)(C.av_output_audio_device_next((*C.struct_AVOutputFormat)(d)))
|
||||
}
|
||||
|
||||
//Video output devices iterator.
|
||||
func (d *OutputFormat) Av_output_video_device_next() *OutputFormat {
|
||||
return (*OutputFormat)(C.av_output_video_device_next((*C.struct_AVOutputFormat)(d)))
|
||||
}
|
||||
+18
-18
@@ -70,6 +70,24 @@ func (ctxt *AvIOContext) AvAppendPacket(pkt *Packet, s int) int {
|
||||
return int(C.av_append_packet((*C.struct_AVIOContext)(ctxt), (*C.struct_AVPacket)(pkt), C.int(s)))
|
||||
}
|
||||
|
||||
func (f *InputFormat) AvRegisterInputFormat() {
|
||||
C.av_register_input_format((*C.struct_AVInputFormat)(f))
|
||||
}
|
||||
|
||||
func (f *OutputFormat) AvRegisterOutputFormat() {
|
||||
C.av_register_output_format((*C.struct_AVOutputFormat)(f))
|
||||
}
|
||||
|
||||
//If f is NULL, returns the first registered input format, if f is non-NULL, returns the next registered input format after f or NULL if f is the last one.
|
||||
func (f *InputFormat) AvIformatNext() *InputFormat {
|
||||
return (*InputFormat)(C.av_iformat_next((*C.struct_AVInputFormat)(f)))
|
||||
}
|
||||
|
||||
//If f is NULL, returns the first registered output format, if f is non-NULL, returns the next registered output format after f or NULL if f is the last one.
|
||||
func (f *OutputFormat) AvOformatNext() *OutputFormat {
|
||||
return (*OutputFormat)(C.av_oformat_next((*C.struct_AVOutputFormat)(f)))
|
||||
}
|
||||
|
||||
//Return the LIBAvFORMAT_VERSION_INT constant.
|
||||
func AvformatVersion() uint {
|
||||
return uint(C.avformat_version())
|
||||
@@ -90,14 +108,6 @@ func AvRegisterAll() {
|
||||
C.av_register_all()
|
||||
}
|
||||
|
||||
func AvRegisterInputFormat(f *InputFormat) {
|
||||
C.av_register_input_format((*C.struct_AVInputFormat)(f))
|
||||
}
|
||||
|
||||
func (f *OutputFormat) AvRegisterOutputFormat() {
|
||||
C.av_register_output_format((*C.struct_AVOutputFormat)(f))
|
||||
}
|
||||
|
||||
//Do global initialization of network components.
|
||||
func AvformatNetworkInit() int {
|
||||
return int(C.avformat_network_init())
|
||||
@@ -108,16 +118,6 @@ func AvformatNetworkDeinit() int {
|
||||
return int(C.avformat_network_deinit())
|
||||
}
|
||||
|
||||
//If f is NULL, returns the first registered input format, if f is non-NULL, returns the next registered input format after f or NULL if f is the last one.
|
||||
func (f *InputFormat) AvIformatNext() *InputFormat {
|
||||
return (*InputFormat)(C.av_iformat_next((*C.struct_AVInputFormat)(f)))
|
||||
}
|
||||
|
||||
//If f is NULL, returns the first registered output format, if f is non-NULL, returns the next registered output format after f or NULL if f is the last one.
|
||||
func (f *OutputFormat) AvOformatNext() *OutputFormat {
|
||||
return (*OutputFormat)(C.av_oformat_next((*C.struct_AVOutputFormat)(f)))
|
||||
}
|
||||
|
||||
//Allocate an Context.
|
||||
func AvformatAllocContext() *Context {
|
||||
return (*Context)(C.avformat_alloc_context())
|
||||
|
||||
+12
-12
@@ -94,8 +94,8 @@ func (s *Context) AvFormatInjectGlobalSideData() {
|
||||
|
||||
//enum AvDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method (const Context *ctx)
|
||||
//Returns the method used to set ctx->duration.
|
||||
func (ctx *Context) AvFmtCtxGetDurationEstimationMethod() AvDurationEstimationMethod {
|
||||
return (AvDurationEstimationMethod)(C.av_fmt_ctx_get_duration_estimation_method((*C.struct_AVFormatContext)(ctx)))
|
||||
func (s *Context) AvFmtCtxGetDurationEstimationMethod() AvDurationEstimationMethod {
|
||||
return (AvDurationEstimationMethod)(C.av_fmt_ctx_get_duration_estimation_method((*C.struct_AVFormatContext)(s)))
|
||||
}
|
||||
|
||||
//void avformat_free_context (Context *s)
|
||||
@@ -117,14 +117,14 @@ func (s *Context) AvNewProgram(id int) *AvProgram {
|
||||
|
||||
//int avformat_find_stream_info (Context *ic, Dictionary **options)
|
||||
//Read packets of a media file to get stream information.
|
||||
func (ic *Context) AvformatFindStreamInfo(d **Dictionary) int {
|
||||
return int(C.avformat_find_stream_info((*C.struct_AVFormatContext)(ic), (**C.struct_AVDictionary)(unsafe.Pointer(d))))
|
||||
func (s *Context) AvformatFindStreamInfo(d **Dictionary) int {
|
||||
return int(C.avformat_find_stream_info((*C.struct_AVFormatContext)(s), (**C.struct_AVDictionary)(unsafe.Pointer(d))))
|
||||
}
|
||||
|
||||
//AvProgram * av_find_program_from_stream (Context *ic, AvProgram *last, int s)
|
||||
//Find the programs which belong to a given stream.
|
||||
func (ic *Context) AvFindProgramFromStream(l *AvProgram, s int) *AvProgram {
|
||||
return (*AvProgram)(C.av_find_program_from_stream((*C.struct_AVFormatContext)(ic), (*C.struct_AVProgram)(l), C.int(s)))
|
||||
func (s *Context) AvFindProgramFromStream(l *AvProgram, su int) *AvProgram {
|
||||
return (*AvProgram)(C.av_find_program_from_stream((*C.struct_AVFormatContext)(s), (*C.struct_AVProgram)(l), C.int(su)))
|
||||
}
|
||||
|
||||
//int av_find_best_stream (Context *ic, enum MediaType type, int wanted_stream_nb, int related_stream, AvCodec **decoder_ret, int flags)
|
||||
@@ -224,20 +224,20 @@ func (s *Context) AvFindDefaultStreamIndex() int {
|
||||
|
||||
//void av_dump_format (Context *ic, int index, const char *url, int is_output)
|
||||
//Print detailed information about the input or output format, such as duration, bitrate, streams, container, programs, metadata, side data, codec and time base.
|
||||
func (ic *Context) AvDumpFormat(i int, url string, io int) {
|
||||
C.av_dump_format((*C.struct_AVFormatContext)(unsafe.Pointer(ic)), C.int(i), C.CString(url), C.int(io))
|
||||
func (s *Context) AvDumpFormat(i int, url string, io int) {
|
||||
C.av_dump_format((*C.struct_AVFormatContext)(unsafe.Pointer(s)), C.int(i), C.CString(url), C.int(io))
|
||||
}
|
||||
|
||||
//Rational av_guess_sample_aspect_ratio (Context *format, Stream *stream, Frame *frame)
|
||||
//Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio.
|
||||
func (f *Context) AvGuessSampleAspectRatio(st *Stream, fr *Frame) Rational {
|
||||
return (Rational)(C.av_guess_sample_aspect_ratio((*C.struct_AVFormatContext)(f), (*C.struct_AVStream)(st), (*C.struct_AVFrame)(fr)))
|
||||
func (s *Context) AvGuessSampleAspectRatio(st *Stream, fr *Frame) Rational {
|
||||
return (Rational)(C.av_guess_sample_aspect_ratio((*C.struct_AVFormatContext)(s), (*C.struct_AVStream)(st), (*C.struct_AVFrame)(fr)))
|
||||
}
|
||||
|
||||
//Rational av_guess_frame_rate (Context *ctx, Stream *stream, Frame *frame)
|
||||
//Guess the frame rate, based on both the container and codec information.
|
||||
func (ctx *Context) AvGuessFrameRate(st *Stream, fr *Frame) Rational {
|
||||
return (Rational)(C.av_guess_frame_rate((*C.struct_AVFormatContext)(ctx), (*C.struct_AVStream)(st), (*C.struct_AVFrame)(fr)))
|
||||
func (s *Context) AvGuessFrameRate(st *Stream, fr *Frame) Rational {
|
||||
return (Rational)(C.av_guess_frame_rate((*C.struct_AVFormatContext)(s), (*C.struct_AVStream)(st), (*C.struct_AVFrame)(fr)))
|
||||
}
|
||||
|
||||
//int avformat_match_stream_specifier (Context *s, Stream *st, const char *spec)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
Use of this source code is governed by a MIT license that can be found in the LICENSE file.
|
||||
by Giorgis (habtom@giorgis.io)
|
||||
|
||||
The process of changing the sampling rate of a discrete signal to obtain
|
||||
a new discrete representation of the underlying continuous signal.
|
||||
resampler provides a high-level interface to the libswresample library audio resampling utilities
|
||||
*/
|
||||
package swresample
|
||||
|
||||
/*
|
||||
#cgo pkg-config: libswresample
|
||||
#include <libswresample/swresample.h>
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//Initialize context after user parameters have been set.
|
||||
func (s *Context) Swr_init() int {
|
||||
return int(C.swr_init((*C.struct_SwrContext)(s)))
|
||||
}
|
||||
|
||||
//Check whether an swr context has been initialized or not.
|
||||
func (s *Context) Swr_is_initialized() int {
|
||||
return int(C.swr_is_initialized((*C.struct_SwrContext)(s)))
|
||||
}
|
||||
|
||||
//Allocate Context if needed and set/reset common parameters.
|
||||
func (s *Context) Swr_alloc_set_opts(ocl int64, osf AvSampleFormat, osr int, icl int64, isf AvSampleFormat, isr, lo, lc int) *Context {
|
||||
return (*Context)(C.swr_alloc_set_opts((*C.struct_SwrContext)(s), C.int64_t(ocl), (C.enum_AVSampleFormat)(osf), C.int(osr), C.int64_t(icl), (C.enum_AVSampleFormat)(isf), C.int(isr), C.int(lo), unsafe.Pointer(&lc)))
|
||||
}
|
||||
|
||||
//Context destructor functions. Free the given Context and set the pointer to NULL.
|
||||
func (s *Context) Swr_free() {
|
||||
C.swr_free((**C.struct_SwrContext)(unsafe.Pointer(s)))
|
||||
}
|
||||
|
||||
//Closes the context so that swr_is_initialized() returns 0.
|
||||
func (s *Context) Swr_close() {
|
||||
C.swr_close((*C.struct_SwrContext)(s))
|
||||
}
|
||||
|
||||
//Core conversion functions. Convert audio
|
||||
func (s *Context) Swr_convert(out **uint8, oc int, in **uint8, ic int) int {
|
||||
return int(C.swr_convert((*C.struct_SwrContext)(s), (**C.uint8_t)(unsafe.Pointer(out)), C.int(oc), (**C.uint8_t)(unsafe.Pointer(in)), C.int(ic)))
|
||||
}
|
||||
|
||||
//Convert the next timestamp from input to output timestamps are in 1/(in_sample_rate * out_sample_rate) units.
|
||||
func (s *Context) Swr_next_pts(pts int64) int64 {
|
||||
return int64(C.swr_next_pts((*C.struct_SwrContext)(s), C.int64_t(pts)))
|
||||
}
|
||||
|
||||
//Low-level option setting functions
|
||||
//These functons provide a means to set low-level options that is not possible with the AvOption API.
|
||||
//Activate resampling compensation ("soft" compensation).
|
||||
func (s *Context) Swr_set_compensation(sd, cd int) int {
|
||||
return int(C.swr_set_compensation((*C.struct_SwrContext)(s), C.int(sd), C.int(cd)))
|
||||
}
|
||||
|
||||
//Set a customized input channel mapping.
|
||||
func (s *Context) Swr_set_channel_mapping(cm *int) int {
|
||||
return int(C.swr_set_channel_mapping((*C.struct_SwrContext)(s), (*C.int)(unsafe.Pointer(cm))))
|
||||
}
|
||||
|
||||
//Set a customized remix matrix.
|
||||
func (s *Context) Swr_set_matrix(m *int, t int) int {
|
||||
return int(C.swr_set_matrix((*C.struct_SwrContext)(s), (*C.double)(unsafe.Pointer(m)), C.int(t)))
|
||||
}
|
||||
|
||||
//Sample handling functions. Drops the specified number of output samples.
|
||||
func (s *Context) Swr_drop_output(c int) int {
|
||||
return int(C.swr_drop_output((*C.struct_SwrContext)(s), C.int(c)))
|
||||
}
|
||||
|
||||
//Injects the specified number of silence samples.
|
||||
func (s *Context) Swr_inject_silence(c int) int {
|
||||
return int(C.swr_inject_silence((*C.struct_SwrContext)(s), C.int(c)))
|
||||
}
|
||||
|
||||
//Gets the delay the next input sample will experience relative to the next output sample.
|
||||
func (s *Context) Swr_get_delay(b int64) int64 {
|
||||
return int64(C.swr_get_delay((*C.struct_SwrContext)(s), C.int64_t(b)))
|
||||
}
|
||||
|
||||
//Frame based API. Convert the samples in the input Frame and write them to the output Frame.
|
||||
func (s *Context) Swr_convert_frame(o, i *Frame) int {
|
||||
return int(C.swr_convert_frame((*C.struct_SwrContext)(s), (*C.struct_AVFrame)(o), (*C.struct_AVFrame)(i)))
|
||||
}
|
||||
|
||||
//Configure or reconfigure the Context using the information provided by the AvFrames.
|
||||
func (s *Context) Swr_config_frame(o, i *Frame) int {
|
||||
return int(C.swr_config_frame((*C.struct_SwrContext)(s), (*C.struct_AVFrame)(o), (*C.struct_AVFrame)(i)))
|
||||
}
|
||||
+1
-106
@@ -24,130 +24,25 @@ type (
|
||||
AvSampleFormat C.enum_AVSampleFormat
|
||||
)
|
||||
|
||||
//const Class * swr_get_class (void)
|
||||
//Get the Class for Context.
|
||||
func Swr_get_class() *Class {
|
||||
return (*Class)(C.swr_get_class())
|
||||
}
|
||||
|
||||
//Context constructor functions
|
||||
//struct Context * swr_alloc (void)
|
||||
//Allocate Context.
|
||||
//Context constructor functions.Allocate Context.
|
||||
func Swr_alloc() *Context {
|
||||
return (*Context)(C.swr_alloc())
|
||||
}
|
||||
|
||||
//int swr_init (struct Context *s)
|
||||
//Initialize context after user parameters have been set.
|
||||
func Swr_init(s *Context) int {
|
||||
return int(C.swr_init((*C.struct_SwrContext)(s)))
|
||||
}
|
||||
|
||||
//int swr_is_initialized (struct Context *s)
|
||||
//Check whether an swr context has been initialized or not.
|
||||
func Swr_is_initialized(s *Context) int {
|
||||
return int(C.swr_is_initialized((*C.struct_SwrContext)(s)))
|
||||
}
|
||||
|
||||
//struct Context * swr_alloc_set_opts (struct Context *s, int64_t out_ch_layout, enum AvSampleFormat out_sample_fmt, int out_sample_rate, int64_t in_ch_layout, enum AvSampleFormat in_sample_fmt, int in_sample_rate, int log_offset, void *log_ctx)
|
||||
//Allocate Context if needed and set/reset common parameters.
|
||||
func Swr_alloc_set_opts(s *Context, ocl int64, osf AvSampleFormat, osr int, icl int64, isf AvSampleFormat, isr, lo, lc int) *Context {
|
||||
return (*Context)(C.swr_alloc_set_opts((*C.struct_SwrContext)(s), C.int64_t(ocl), (C.enum_AVSampleFormat)(osf), C.int(osr), C.int64_t(icl), (C.enum_AVSampleFormat)(isf), C.int(isr), C.int(lo), unsafe.Pointer(&lc)))
|
||||
}
|
||||
|
||||
//Context destructor functions
|
||||
//void swr_free (struct Context **s)
|
||||
//Free the given Context and set the pointer to NULL.
|
||||
func Swr_free(s **Context) {
|
||||
C.swr_free((**C.struct_SwrContext)(unsafe.Pointer(s)))
|
||||
}
|
||||
|
||||
//void swr_close (struct Context *s)
|
||||
//Closes the context so that swr_is_initialized() returns 0.
|
||||
func Swr_close(s *Context) {
|
||||
C.swr_close((*C.struct_SwrContext)(s))
|
||||
}
|
||||
|
||||
//Core conversion functions
|
||||
//int swr_convert (struct Context *s, uint8_t **out, int out_count, const uint8_t **in, int in_count)
|
||||
//Convert audio.
|
||||
func Swr_convert(s *Context, out **uint8, oc int, in **uint8, ic int) int {
|
||||
return int(C.swr_convert((*C.struct_SwrContext)(s), (**C.uint8_t)(unsafe.Pointer(out)), C.int(oc), (**C.uint8_t)(unsafe.Pointer(in)), C.int(ic)))
|
||||
}
|
||||
|
||||
//int64_t swr_next_pts (struct Context *s, int64_t pts)
|
||||
//Convert the next timestamp from input to output timestamps are in 1/(in_sample_rate * out_sample_rate) units.
|
||||
func Swr_next_pts(s *Context, pts int64) int64 {
|
||||
return int64(C.swr_next_pts((*C.struct_SwrContext)(s), C.int64_t(pts)))
|
||||
}
|
||||
|
||||
//Low-level option setting functions
|
||||
//These functons provide a means to set low-level options that is not possible with the AvOption API.
|
||||
//int swr_set_compensation (struct Context *s, int sample_delta, int compensation_distance)
|
||||
//Activate resampling compensation ("soft" compensation).
|
||||
func Swr_set_compensation(s *Context, sd, cd int) int {
|
||||
return int(C.swr_set_compensation((*C.struct_SwrContext)(s), C.int(sd), C.int(cd)))
|
||||
}
|
||||
|
||||
//int swr_set_channel_mapping (struct Context *s, const int *channel_map)
|
||||
//Set a customized input channel mapping.
|
||||
func Swr_set_channel_mapping(s *Context, cm *int) int {
|
||||
return int(C.swr_set_channel_mapping((*C.struct_SwrContext)(s), (*C.int)(unsafe.Pointer(cm))))
|
||||
}
|
||||
|
||||
//int swr_set_matrix (struct Context *s, const double *matrix, int stride)
|
||||
//Set a customized remix matrix.
|
||||
func Swr_set_matrix(s *Context, m *int, t int) int {
|
||||
return int(C.swr_set_matrix((*C.struct_SwrContext)(s), (*C.double)(unsafe.Pointer(m)), C.int(t)))
|
||||
}
|
||||
|
||||
//Sample handling functions
|
||||
//int swr_drop_output (struct Context *s, int count)
|
||||
//Drops the specified number of output samples.
|
||||
func Swr_drop_output(s *Context, c int) int {
|
||||
return int(C.swr_drop_output((*C.struct_SwrContext)(s), C.int(c)))
|
||||
}
|
||||
|
||||
//int swr_inject_silence (struct Context *s, int count)
|
||||
//Injects the specified number of silence samples.
|
||||
func Swr_inject_silence(s *Context, c int) int {
|
||||
return int(C.swr_inject_silence((*C.struct_SwrContext)(s), C.int(c)))
|
||||
}
|
||||
|
||||
//int64_t swr_get_delay (struct Context *s, int64_t base)
|
||||
//Gets the delay the next input sample will experience relative to the next output sample.
|
||||
func Swr_get_delay(s *Context, b int64) int64 {
|
||||
return int64(C.swr_get_delay((*C.struct_SwrContext)(s), C.int64_t(b)))
|
||||
}
|
||||
|
||||
//Configuration accessors
|
||||
//unsigned swresample_version (void)
|
||||
//Return the LIBSWRESAMPLE_VERSION_INT constant.
|
||||
func Swresample_version() uint {
|
||||
return uint(C.swresample_version())
|
||||
}
|
||||
|
||||
//const char * swresample_configuration (void)
|
||||
//Return the swr build-time configuration.
|
||||
func Swresample_configuration() string {
|
||||
return C.GoString(C.swresample_configuration())
|
||||
}
|
||||
|
||||
//const char * swresample_license (void)
|
||||
//Return the swr license.
|
||||
func Swresample_license() string {
|
||||
return C.GoString(C.swresample_license())
|
||||
}
|
||||
|
||||
//Frame based API
|
||||
//int swr_convert_frame (Context *swr, Frame *output, const Frame *input)
|
||||
//Convert the samples in the input Frame and write them to the output Frame.
|
||||
func Swr_convert_frame(s *Context, o, i *Frame) int {
|
||||
return int(C.swr_convert_frame((*C.struct_SwrContext)(s), (*C.struct_AVFrame)(o), (*C.struct_AVFrame)(i)))
|
||||
}
|
||||
|
||||
//int swr_config_frame (Context *swr, const Frame *out, const Frame *in)
|
||||
//Configure or reconfigure the Context using the information provided by the AvFrames.
|
||||
func Swr_config_frame(s *Context, o, i *Frame) int {
|
||||
return int(C.swr_config_frame((*C.struct_SwrContext)(s), (*C.struct_AVFrame)(o), (*C.struct_AVFrame)(i)))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user