mirror of
https://github.com/giorgisio/goav.git
synced 2024-04-21 12:31:56 +00:00
719 lines
34 KiB
Go
719 lines
34 KiB
Go
/*
|
|
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 codecs (decoders and encoders) provided by the libavcodec library
|
|
libavcodec provides some generic global options, which can be set on all the encoders and decoders.
|
|
*/
|
|
package avcodec
|
|
|
|
//#cgo pkg-config: libavformat libavcodec libavutil libswresample
|
|
//#include <stdio.h>
|
|
//#include <stdlib.h>
|
|
//#include <inttypes.h>
|
|
//#include <stdint.h>
|
|
//#include <string.h>
|
|
//#include <libavformat/avformat.h>
|
|
//#include <libavcodec/avcodec.h>
|
|
//#include <libavutil/avutil.h>
|
|
import "C"
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
type (
|
|
AVBitStreamFilter C.struct_AVBitStreamFilter
|
|
AVBitStreamFilterContext C.struct_AVBitStreamFilterContext
|
|
AVClass C.struct_AVClass
|
|
AVCodec C.struct_AVCodec
|
|
AVCodecContext C.struct_AVCodecContext
|
|
AVCodecDescriptor C.struct_AVCodecDescriptor
|
|
AVCodecParser C.struct_AVCodecParser
|
|
AVCodecParserContext C.struct_AVCodecParserContext
|
|
AVDictionary C.struct_AVDictionary
|
|
AVFrame C.struct_AVFrame
|
|
AVHWAccel C.struct_AVHWAccel
|
|
AVPacket C.struct_AVPacket
|
|
AVPacketSideData C.struct_AVPacketSideData
|
|
AVPanScan C.struct_AVPanScan
|
|
AVPicture C.struct_AVPicture
|
|
AVProfile C.struct_AVProfile
|
|
AVRational C.struct_AVRational
|
|
AVSubtitle C.struct_AVSubtitle
|
|
AVSubtitleRect C.struct_AVSubtitleRect
|
|
RcOverride C.struct_RcOverride
|
|
AVBufferRef C.struct_AVBufferRef
|
|
AVAudioServiceType C.enum_AVAudioServiceType
|
|
AVChromaLocation C.enum_AVChromaLocation
|
|
AVCodecID C.enum_AVCodecID
|
|
AVColorPrimaries C.enum_AVColorPrimaries
|
|
AVColorRange C.enum_AVColorRange
|
|
AVColorSpace C.enum_AVColorSpace
|
|
AVColorTransferCharacteristic C.enum_AVColorTransferCharacteristic
|
|
AVDiscard C.enum_AVDiscard
|
|
AVFieldOrder C.enum_AVFieldOrder
|
|
AVMediaType C.enum_AVMediaType
|
|
AVPacketSideDataType C.enum_AVPacketSideDataType
|
|
AVPixelFormat C.enum_AVPixelFormat
|
|
AVSampleFormat C.enum_AVSampleFormat
|
|
)
|
|
|
|
//AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx)
|
|
func Av_codec_get_pkt_timebase(ctxt *AVCodecContext) AVRational {
|
|
return (AVRational)(C.av_codec_get_pkt_timebase((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val)
|
|
func Av_codec_set_pkt_timebase(ctxt *AVCodecContext, r AVRational) {
|
|
C.av_codec_set_pkt_timebase((*C.struct_AVCodecContext)(ctxt), (C.struct_AVRational)(r))
|
|
}
|
|
|
|
//const AVCodecDescriptor * av_codec_get_codec_descriptor (const AVCodecContext *avctx)
|
|
func Av_codec_get_codec_descriptor(ctxt *AVCodecContext) *AVCodecDescriptor {
|
|
return (*AVCodecDescriptor)(C.av_codec_get_codec_descriptor((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//void av_codec_set_codec_descriptor (AVCodecContext *avctx, const AVCodecDescriptor *desc)
|
|
func Av_codec_set_codec_descriptor(ctxt *AVCodecContext, d *AVCodecDescriptor) {
|
|
C.av_codec_set_codec_descriptor((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVCodecDescriptor)(d))
|
|
}
|
|
|
|
//int av_codec_get_lowres (const AVCodecContext *avctx)
|
|
func Av_codec_get_lowres(ctxt *AVCodecContext) int {
|
|
return int(C.av_codec_get_lowres((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//void av_codec_set_lowres (AVCodecContext *avctx, int val)
|
|
func Av_codec_set_lowres(ctxt *AVCodecContext, i int) {
|
|
C.av_codec_set_lowres((*C.struct_AVCodecContext)(ctxt), C.int(i))
|
|
}
|
|
|
|
//int av_codec_get_seek_preroll (const AVCodecContext *avctx)
|
|
func Av_codec_get_seek_preroll(ctxt *AVCodecContext) int {
|
|
return int(C.av_codec_get_seek_preroll((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//void av_codec_set_seek_preroll (AVCodecContext *avctx, int val)
|
|
func Av_codec_set_seek_preroll(ctxt *AVCodecContext, i int) {
|
|
C.av_codec_set_seek_preroll((*C.struct_AVCodecContext)(ctxt), C.int(i))
|
|
}
|
|
|
|
//uint16_t *av_codec_get_chroma_intra_matrix (const AVCodecContext *avctx)
|
|
func Av_codec_get_chroma_intra_matrix(ctxt *AVCodecContext) *uint16 {
|
|
return (*uint16)(C.av_codec_get_chroma_intra_matrix((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//void av_codec_set_chroma_intra_matrix (AVCodecContext *avctx, uint16_t *val)
|
|
func Av_codec_set_chroma_intra_matrix(ctxt *AVCodecContext, t *uint16) {
|
|
C.av_codec_set_chroma_intra_matrix((*C.struct_AVCodecContext)(ctxt), (*C.uint16_t)(t))
|
|
}
|
|
|
|
//int av_codec_get_max_lowres (const AVCodec *codec)
|
|
func Av_codec_get_max_lowres(c *AVCodec) int {
|
|
return int(C.av_codec_get_max_lowres((*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//If c is NULL, returns the first registered codec, if c is non-NULL,
|
|
//returns the next registered codec after c, or NULL if c is the last one.
|
|
//AVCodec *av_codec_next (const AVCodec *c)
|
|
func Av_codec_next(c *AVCodec) *AVCodec {
|
|
return (*AVCodec)(C.av_codec_next((*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//Return the LIBAVCODEC_VERSION_INT constant.
|
|
//unsigned avcodec_version (void)
|
|
func Avcodec_version() uint {
|
|
return uint(C.avcodec_version())
|
|
}
|
|
|
|
//Return the libavcodec build-time configuration.
|
|
//const char *avcodec_configuration (void)
|
|
func Avcodec_configuration() string {
|
|
return C.GoString(C.avcodec_configuration())
|
|
|
|
}
|
|
|
|
//Return the libavcodec license.
|
|
//const char *avcodec_license (void)
|
|
func Avcodec_license() string {
|
|
return C.GoString(C.avcodec_license())
|
|
}
|
|
|
|
//Register the codec codec and initialize libavcodec.
|
|
//void avcodec_register (AVCodec *codec)
|
|
func Avcodec_register(c *AVCodec) {
|
|
C.avcodec_register((*C.struct_AVCodec)(c))
|
|
}
|
|
|
|
//Register all the codecs, parsers and bitstream filters which were enabled at configuration time.
|
|
//void avcodec_register_all (void)
|
|
func Avcodec_register_all() {
|
|
C.avcodec_register_all()
|
|
}
|
|
|
|
//Allocate an AVCodecContext and set its fields to default values.
|
|
//AVCodecContext *avcodec_alloc_context3 (const AVCodec *codec)
|
|
func Avcodec_alloc_context3(c *AVCodec) *AVCodecContext {
|
|
return (*AVCodecContext)(C.avcodec_alloc_context3((*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//Free the codec context and everything associated with it and write NULL to the provided pointer.
|
|
//void avcodec_free_context (AVCodecContext **avctx)
|
|
func Avcodec_free_context(ctxt **AVCodecContext) {
|
|
C.avcodec_free_context((**C.struct_AVCodecContext)(unsafe.Pointer(ctxt)))
|
|
}
|
|
|
|
//Set the fields of the given AVCodecContext to default values corresponding to the given codec (defaults may be codec-dependent).
|
|
//int avcodec_get_context_defaults3 (AVCodecContext *s, const AVCodec *codec)
|
|
func Avcodec_get_context_defaults3(ctxt *AVCodecContext, c *AVCodec) int {
|
|
return int(C.avcodec_get_context_defaults3((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//Get the AVClass for AVCodecContext.
|
|
//const AVClass *avcodec_get_class (void)
|
|
func Avcodec_get_class() *AVClass {
|
|
return (*AVClass)(C.avcodec_get_class())
|
|
}
|
|
|
|
//Get the AVClass for AVFrame.
|
|
//const AVClass *avcodec_get_frame_class (void)
|
|
func Avcodec_get_frame_class() *AVClass {
|
|
return (*AVClass)(C.avcodec_get_frame_class())
|
|
}
|
|
|
|
//Get the AVClass for AVSubtitleRect.
|
|
//const AVClass *avcodec_get_subtitle_rect_class (void)
|
|
func Avcodec_get_subtitle_rect_class() *AVClass {
|
|
return (*AVClass)(C.avcodec_get_subtitle_rect_class())
|
|
}
|
|
|
|
//Copy the settings of the source AVCodecContext into the destination AVCodecContext.
|
|
//int avcodec_copy_context (AVCodecContext *dest, const AVCodecContext *src)
|
|
func Avcodec_copy_context(ctxt, ctxt2 *AVCodecContext) int {
|
|
return int(C.avcodec_copy_context((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVCodecContext)(ctxt2)))
|
|
}
|
|
|
|
//Initialize the AVCodecContext to use the given AVCodec
|
|
//int avcodec_open2 (AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
|
|
func Avcodec_open2(ctxt *AVCodecContext, c *AVCodec, d **AVDictionary) int {
|
|
return int(C.avcodec_open2((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVCodec)(c), (**C.struct_AVDictionary)(unsafe.Pointer(d))))
|
|
}
|
|
|
|
//Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext itself).
|
|
//int avcodec_close (AVCodecContext *avctx)
|
|
func Avcodec_close(ctxt *AVCodecContext) int {
|
|
return int(C.avcodec_close((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//Free all allocated data in the given subtitle struct.
|
|
//void avsubtitle_free (AVSubtitle *sub)
|
|
func Avsubtitle_free(s *AVSubtitle) {
|
|
C.avsubtitle_free((*C.struct_AVSubtitle)(s))
|
|
}
|
|
|
|
//Initialize optional fields of a packet with default values.
|
|
//void av_init_packet (AVPacket *pkt)
|
|
func Av_init_packet(p *AVPacket) {
|
|
C.av_init_packet((*C.struct_AVPacket)(p))
|
|
}
|
|
|
|
//Allocate the payload of a packet and initialize its fields with default values.
|
|
//int av_new_packet (AVPacket *pkt, int size)
|
|
func Av_new_packet(p *AVPacket, s int) int {
|
|
return int(C.av_new_packet((*C.struct_AVPacket)(p), C.int(s)))
|
|
}
|
|
|
|
//Reduce packet size, correctly zeroing padding.
|
|
//void av_shrink_packet (AVPacket *pkt, int size)
|
|
func Av_shrink_packet(p *AVPacket, s int) {
|
|
C.av_shrink_packet((*C.struct_AVPacket)(p), C.int(s))
|
|
}
|
|
|
|
//Increase packet size, correctly zeroing padding.
|
|
//int av_grow_packet (AVPacket *pkt, int grow_by)
|
|
func Av_grow_packet(p *AVPacket, s int) int {
|
|
return int(C.av_grow_packet((*C.struct_AVPacket)(p), C.int(s)))
|
|
}
|
|
|
|
//Initialize a reference-counted packet from av_malloc()ed data.
|
|
//int av_packet_from_data (AVPacket *pkt, uint8_t *data, int size)
|
|
func Av_packet_from_data(p *AVPacket, d *uint8, s int) int {
|
|
return int(C.av_packet_from_data((*C.struct_AVPacket)(p), (*C.uint8_t)(d), C.int(s)))
|
|
|
|
}
|
|
|
|
//int av_dup_packet (AVPacket *pkt)
|
|
func Av_dup_packet(p *AVPacket) int {
|
|
return int(C.av_dup_packet((*C.struct_AVPacket)(p)))
|
|
|
|
}
|
|
|
|
//Copy packet, including contents.
|
|
//int av_copy_packet (AVPacket *dst, const AVPacket *src)
|
|
func Av_copy_packet(p, r *AVPacket) int {
|
|
return int(C.av_copy_packet((*C.struct_AVPacket)(p), (*C.struct_AVPacket)(r)))
|
|
|
|
}
|
|
|
|
//Copy packet side data.
|
|
//int av_copy_packet_side_data (AVPacket *dst, const AVPacket *src)
|
|
func Av_copy_packet_side_data(p, r *AVPacket) int {
|
|
return int(C.av_copy_packet_side_data((*C.struct_AVPacket)(p), (*C.struct_AVPacket)(r)))
|
|
|
|
}
|
|
|
|
//Free a packet.
|
|
//void av_free_packet (AVPacket *pkt)
|
|
func Av_free_packet(p *AVPacket) {
|
|
C.av_free_packet((*C.struct_AVPacket)(p))
|
|
|
|
}
|
|
|
|
//Allocate new information of a packet.
|
|
//uint8_t *av_packet_new_side_data (AVPacket *pkt, enum AVPacketSideDataType type, int size)
|
|
func Av_packet_new_side_data(p *AVPacket, t AVPacketSideDataType, s int) *uint8 {
|
|
return (*uint8)(C.av_packet_new_side_data((*C.struct_AVPacket)(p), (C.enum_AVPacketSideDataType)(t), C.int(s)))
|
|
}
|
|
|
|
//Shrink the already allocated side data buffer.
|
|
//int av_packet_shrink_side_data (AVPacket *pkt, enum AVPacketSideDataType type, int size)
|
|
func Av_packet_shrink_side_data(p *AVPacket, t AVPacketSideDataType, s int) int {
|
|
return int(C.av_packet_shrink_side_data((*C.struct_AVPacket)(p), (C.enum_AVPacketSideDataType)(t), C.int(s)))
|
|
}
|
|
|
|
//Get side information from packet.
|
|
//uint8_t *av_packet_get_side_data (AVPacket *pkt, enum AVPacketSideDataType type, int *size)
|
|
func Av_packet_get_side_data(p *AVPacket, t AVPacketSideDataType, s *int) *uint8 {
|
|
return (*uint8)(C.av_packet_get_side_data((*C.struct_AVPacket)(p), (C.enum_AVPacketSideDataType)(t), (*C.int)(unsafe.Pointer(s))))
|
|
}
|
|
|
|
//int av_packet_merge_side_data (AVPacket *pkt)
|
|
func Av_packet_merge_side_data(p *AVPacket) int {
|
|
return int(C.av_packet_merge_side_data((*C.struct_AVPacket)(p)))
|
|
}
|
|
|
|
//int av_packet_split_side_data (AVPacket *pkt)
|
|
func Av_packet_split_side_data(p *AVPacket) int {
|
|
return int(C.av_packet_split_side_data((*C.struct_AVPacket)(p)))
|
|
}
|
|
|
|
// //const char *av_packet_side_data_name (enum AVPacketSideDataType type)
|
|
// func Av_packet_side_data_name(t AVPacketSideDataType) string {
|
|
// return C.GoString(C.av_packet_side_data_name((C.enum_AVPacketSideDataType)(t)))
|
|
// }
|
|
|
|
//Pack a dictionary for use in side_data.
|
|
//uint8_t *av_packet_pack_dictionary (AVDictionary *dict, int *size)
|
|
func Av_packet_pack_dictionary(d *AVDictionary, s *int) *uint8 {
|
|
return (*uint8)(C.av_packet_pack_dictionary((*C.struct_AVDictionary)(d), (*C.int)(unsafe.Pointer(s))))
|
|
}
|
|
|
|
//Unpack a dictionary from side_data.
|
|
//int av_packet_unpack_dictionary (const uint8_t *data, int size, AVDictionary **dict)
|
|
func Av_packet_unpack_dictionary(d *uint8, s int, dt **AVDictionary) int {
|
|
return int(C.av_packet_unpack_dictionary((*C.uint8_t)(d), C.int(s), (**C.struct_AVDictionary)(unsafe.Pointer(dt))))
|
|
}
|
|
|
|
//Convenience function to free all the side data stored.
|
|
//void av_packet_free_side_data (AVPacket *pkt)
|
|
func Av_packet_free_side_data(p *AVPacket) {
|
|
C.av_packet_free_side_data((*C.struct_AVPacket)(p))
|
|
}
|
|
|
|
//Setup a new reference to the data described by a given packet.
|
|
//int av_packet_ref (AVPacket *dst, const AVPacket *src)
|
|
func Av_packet_ref(p, s *AVPacket) int {
|
|
return int(C.av_packet_ref((*C.struct_AVPacket)(p), (*C.struct_AVPacket)(s)))
|
|
}
|
|
|
|
//Wipe the packet.
|
|
//void av_packet_unref (AVPacket *pkt)
|
|
func Av_packet_unref(p *AVPacket) {
|
|
C.av_packet_unref((*C.struct_AVPacket)(p))
|
|
}
|
|
|
|
//Move every field in src to dst and reset src.
|
|
//void av_packet_move_ref (AVPacket *dst, AVPacket *src)
|
|
func Av_packet_move_ref(p, s *AVPacket) {
|
|
C.av_packet_move_ref((*C.struct_AVPacket)(p), (*C.struct_AVPacket)(s))
|
|
}
|
|
|
|
//Copy only "properties" fields from src to dst.
|
|
//int av_packet_copy_props (AVPacket *dst, const AVPacket *src)
|
|
func Av_packet_copy_props(p, s *AVPacket) int {
|
|
return int(C.av_packet_copy_props((*C.struct_AVPacket)(p), (*C.struct_AVPacket)(s)))
|
|
}
|
|
|
|
//Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
|
|
//void av_packet_rescale_ts (AVPacket *pkt, AVRational tb_src, AVRational tb_dst)
|
|
func Av_packet_rescale_ts(p *AVPacket, r, r2 AVRational) {
|
|
C.av_packet_rescale_ts((*C.struct_AVPacket)(p), (C.struct_AVRational)(r), (C.struct_AVRational)(r2))
|
|
}
|
|
|
|
//Find a registered decoder with a matching codec ID.
|
|
//AVCodec *avcodec_find_decoder (enum AVCodecID id)
|
|
func Avcodec_find_decoder(id AVCodecID) *AVCodec {
|
|
return (*AVCodec)(C.avcodec_find_decoder((C.enum_AVCodecID)(id)))
|
|
}
|
|
|
|
//Find a registered decoder with the specified name.
|
|
//AVCodec *avcodec_find_decoder_by_name (const char *name)
|
|
func Avcodec_find_decoder_by_name(n string) *AVCodec {
|
|
return (*AVCodec)(C.avcodec_find_decoder_by_name(C.CString(n)))
|
|
}
|
|
|
|
//The default callback for AVCodecContext.get_buffer2().
|
|
//int avcodec_default_get_buffer2 (AVCodecContext *s, AVFrame *frame, int flags)
|
|
func Avcodec_default_get_buffer2(s *AVCodecContext, f *AVFrame, l int) int {
|
|
return int(C.avcodec_default_get_buffer2((*C.struct_AVCodecContext)(s), (*C.struct_AVFrame)(f), C.int(l)))
|
|
}
|
|
|
|
//Modify width and height values so that they will result in a memory buffer that is acceptable for the codec if you do not use any horizontal padding.
|
|
//void avcodec_align_dimensions (AVCodecContext *s, int *width, int *height)
|
|
func Avcodec_align_dimensions(ctxt *AVCodecContext, w, h *int) {
|
|
C.avcodec_align_dimensions((*C.struct_AVCodecContext)(ctxt), (*C.int)(unsafe.Pointer(w)), (*C.int)(unsafe.Pointer(h)))
|
|
}
|
|
|
|
//Modify width and height values so that they will result in a memory buffer that is acceptable for the codec if you also ensure that all line sizes are a multiple of the respective linesize_align[i].
|
|
//void avcodec_align_dimensions2 (AVCodecContext *s, int *width, int *height, int linesize_align[AV_NUM_DATA_POINTERS])
|
|
func Avcodec_align_dimensions2(ctxt *AVCodecContext, w, h *int, l int) {
|
|
C.avcodec_align_dimensions2((*C.struct_AVCodecContext)(ctxt), (*C.int)(unsafe.Pointer(w)), (*C.int)(unsafe.Pointer(h)), (*C.int)(unsafe.Pointer(&l)))
|
|
}
|
|
|
|
//Converts AVChromaLocation to swscale x/y chroma position.
|
|
//int avcodec_enum_to_chroma_pos (int *xpos, int *ypos, enum AVChromaLocation pos)
|
|
func Avcodec_enum_to_chroma_pos(x, y *int, l AVChromaLocation) int {
|
|
return int(C.avcodec_enum_to_chroma_pos((*C.int)(unsafe.Pointer(x)), (*C.int)(unsafe.Pointer(y)), (C.enum_AVChromaLocation)(l)))
|
|
}
|
|
|
|
//Converts swscale x/y chroma position to AVChromaLocation.
|
|
//enum AVChromaLocation avcodec_chroma_pos_to_enum (int xpos, int ypos)
|
|
func Avcodec_chroma_pos_to_enum(x, y int) AVChromaLocation {
|
|
return (AVChromaLocation)(C.avcodec_chroma_pos_to_enum(C.int(x), C.int(y)))
|
|
}
|
|
|
|
//Decode the audio frame of size avpkt->size from avpkt->data into frame.
|
|
//int avcodec_decode_audio4 (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, const AVPacket *avpkt)
|
|
func Avcodec_decode_audio4(ctxt *AVCodecContext, f *AVFrame, g *int, a *AVPacket) int {
|
|
return int(C.avcodec_decode_audio4((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVFrame)(f), (*C.int)(unsafe.Pointer(g)), (*C.struct_AVPacket)(a)))
|
|
}
|
|
|
|
//Decode the video frame of size avpkt->size from avpkt->data into picture.
|
|
//int avcodec_decode_video2 (AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt)
|
|
func Avcodec_decode_video2(ctxt *AVCodecContext, p *AVFrame, g *int, a *AVPacket) int {
|
|
return int(C.avcodec_decode_video2((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVFrame)(p), (*C.int)(unsafe.Pointer(g)), (*C.struct_AVPacket)(a)))
|
|
}
|
|
|
|
//Decode a subtitle message.
|
|
//int avcodec_decode_subtitle2 (AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
|
|
func Avcodec_decode_subtitle2(ctxt *AVCodecContext, s *AVSubtitle, g *int, a *AVPacket) int {
|
|
return int(C.avcodec_decode_subtitle2((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVSubtitle)(s), (*C.int)(unsafe.Pointer(g)), (*C.struct_AVPacket)(a)))
|
|
}
|
|
|
|
//AVCodecParser *av_parser_next (const AVCodecParser *c)
|
|
func Av_parser_next(p *AVCodecParser) *AVCodecParser {
|
|
return (*AVCodecParser)(C.av_parser_next((*C.struct_AVCodecParser)(p)))
|
|
}
|
|
|
|
//void av_register_codec_parser (AVCodecParser *parser)
|
|
func Av_register_codec_parser(p *AVCodecParser) {
|
|
C.av_register_codec_parser((*C.struct_AVCodecParser)(p))
|
|
}
|
|
|
|
//AVCodecParserContext *av_parser_init (int codec_id)
|
|
func Av_parser_init(c int) *AVCodecParserContext {
|
|
return (*AVCodecParserContext)(C.av_parser_init(C.int(c)))
|
|
}
|
|
|
|
//Parse a packet.
|
|
//int av_parser_parse2 (AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int64_t pts, int64_t dts, int64_t pos)
|
|
func Av_parser_parse2(ctxtp *AVCodecParserContext, ctxt *AVCodecContext, p **uint8, ps *int, b *uint8, bs int, pt, dt, po int64) int {
|
|
return int(C.av_parser_parse2((*C.struct_AVCodecParserContext)(ctxtp), (*C.struct_AVCodecContext)(ctxt), (**C.uint8_t)(unsafe.Pointer(p)), (*C.int)(unsafe.Pointer(ps)), (*C.uint8_t)(b), C.int(bs), (C.int64_t)(pt), (C.int64_t)(dt), (C.int64_t)(po)))
|
|
}
|
|
|
|
//int av_parser_change (AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
|
|
func Av_parser_change(ctxtp *AVCodecParserContext, ctxt *AVCodecContext, pb **uint8, pbs *int, b *uint8, bs, k int) int {
|
|
return int(C.av_parser_change((*C.struct_AVCodecParserContext)(ctxtp), (*C.struct_AVCodecContext)(ctxt), (**C.uint8_t)(unsafe.Pointer(pb)), (*C.int)(unsafe.Pointer(pbs)), (*C.uint8_t)(b), C.int(bs), C.int(k)))
|
|
}
|
|
|
|
//void av_parser_close (AVCodecParserContext *s)
|
|
func Av_parser_close(ctxtp *AVCodecParserContext) {
|
|
C.av_parser_close((*C.struct_AVCodecParserContext)(ctxtp))
|
|
}
|
|
|
|
//Find a registered encoder with a matching codec ID.
|
|
//AVCodec *avcodec_find_encoder (enum AVCodecID id)
|
|
func Avcodec_find_encoder(id AVCodecID) *AVCodec {
|
|
return (*AVCodec)(C.avcodec_find_encoder((C.enum_AVCodecID)(id)))
|
|
}
|
|
|
|
//Find a registered encoder with the specified name.
|
|
//AVCodec *avcodec_find_encoder_by_name (const char *name)
|
|
func Avcodec_find_encoder_by_name(c string) *AVCodec {
|
|
return (*AVCodec)(C.avcodec_find_encoder_by_name(C.CString(c)))
|
|
}
|
|
|
|
//Encode a frame of audio.
|
|
//int avcodec_encode_audio2 (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
|
|
func Avcodec_encode_audio2(ctxt *AVCodecContext, p *AVPacket, f *AVFrame, gp *int) int {
|
|
return int(C.avcodec_encode_audio2((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVPacket)(p), (*C.struct_AVFrame)(f), (*C.int)(unsafe.Pointer(gp))))
|
|
}
|
|
|
|
//Encode a frame of video
|
|
//int avcodec_encode_video2 (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
|
|
func Avcodec_encode_video2(ctxt *AVCodecContext, p *AVPacket, f *AVFrame, gp *int) int {
|
|
return int(C.avcodec_encode_video2((*C.struct_AVCodecContext)(ctxt), (*C.struct_AVPacket)(p), (*C.struct_AVFrame)(f), (*C.int)(unsafe.Pointer(gp))))
|
|
}
|
|
|
|
//int avcodec_encode_subtitle (AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVSubtitle *sub)
|
|
func Avcodec_encode_subtitle(ctxt *AVCodecContext, b *uint8, bs int, s *AVSubtitle) int {
|
|
return int(C.avcodec_encode_subtitle((*C.struct_AVCodecContext)(ctxt), (*C.uint8_t)(b), C.int(bs), (*C.struct_AVSubtitle)(s)))
|
|
}
|
|
|
|
//Free a picture previously allocated by avpicture_alloc().
|
|
//Allocate memory for the pixels of a picture and setup the AVPicture fields for it.
|
|
func Avpicture_alloc(p *AVPicture, t AVPixelFormat, w, h int) int {
|
|
return int(C.avpicture_alloc((*C.struct_AVPicture)(p), (C.enum_AVPixelFormat)(t), C.int(w), C.int(h)))
|
|
}
|
|
|
|
//void avpicture_free (AVPicture *picture)
|
|
func Avpicture_free(p *AVPicture) {
|
|
C.avpicture_free((*C.struct_AVPicture)(p))
|
|
}
|
|
|
|
//Setup the picture fields based on the specified image parameters and the provided image data buffer.
|
|
//int avpicture_fill (AVPicture *picture, const uint8_t *ptr, enum AVPixelFormat pix_fmt, int width, int height)
|
|
func Avpicture_fill(p *AVPicture, pt *uint8, pf AVPixelFormat, w, h int) int {
|
|
return int(C.avpicture_fill((*C.struct_AVPicture)(p), (*C.uint8_t)(pt), (C.enum_AVPixelFormat)(pf), C.int(w), C.int(h)))
|
|
}
|
|
|
|
//Copy pixel data from an AVPicture into a buffer.
|
|
//int avpicture_layout (const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height, unsigned char *dest, int dest_size)
|
|
func Avpicture_layout(s *AVPicture, pf AVPixelFormat, w, h int, d *string, ds int) int {
|
|
return int(C.avpicture_layout((*C.struct_AVPicture)(s), (C.enum_AVPixelFormat)(pf), C.int(w), C.int(h), (*C.uchar)(unsafe.Pointer(d)), C.int(ds)))
|
|
}
|
|
|
|
//Calculate the size in bytes that a picture of the given width and height would occupy if stored in the given picture format.
|
|
//int avpicture_get_size (enum AVPixelFormat pix_fmt, int width, int height)
|
|
func Avpicture_get_size(pf AVPixelFormat, w, h int) int {
|
|
return int(C.avpicture_get_size((C.enum_AVPixelFormat)(pf), C.int(w), C.int(h)))
|
|
}
|
|
|
|
//Copy image src to dst.
|
|
//void av_picture_copy (AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height)
|
|
func Av_picture_copy(d, s *AVPicture, pf AVPixelFormat, w, h int) {
|
|
C.av_picture_copy((*C.struct_AVPicture)(d), (*C.struct_AVPicture)(s), (C.enum_AVPixelFormat)(pf), C.int(w), C.int(h))
|
|
}
|
|
|
|
//Crop image top and left side.
|
|
//int av_picture_crop (AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int top_band, int left_band)
|
|
func Av_picture_crop(d, s *AVPicture, pf AVPixelFormat, t, l int) int {
|
|
return int(C.av_picture_crop((*C.struct_AVPicture)(d), (*C.struct_AVPicture)(s), (C.enum_AVPixelFormat)(pf), C.int(t), C.int(l)))
|
|
}
|
|
|
|
//Pad image.
|
|
//int av_picture_pad (AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, int padtop, int padbottom, int padleft, int padright, int *color)
|
|
func Av_picture_pad(p, s *AVPicture, h, w int, pf AVPixelFormat, t, b, l, r int, c *int) int {
|
|
return int(C.av_picture_pad((*C.struct_AVPicture)(p), (*C.struct_AVPicture)(s), (C.int)(h), (C.int)(w), (C.enum_AVPixelFormat)(pf), (C.int)(t), (C.int)(b), (C.int)(l), (C.int)(r), (*C.int)(unsafe.Pointer(c))))
|
|
}
|
|
|
|
//Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
|
|
//void avcodec_get_chroma_sub_sample (enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
|
|
func Avcodec_get_chroma_sub_sample(pf AVPixelFormat, h, v *int) {
|
|
C.avcodec_get_chroma_sub_sample((C.enum_AVPixelFormat)(pf), (*C.int)(unsafe.Pointer(h)), (*C.int)(unsafe.Pointer(v)))
|
|
}
|
|
|
|
//Return a value representing the fourCC code associated to the pixel format pix_fmt, or 0 if no associated fourCC code can be found.
|
|
//unsigned int avcodec_pix_fmt_to_codec_tag (enum AVPixelFormat pix_fmt)
|
|
func Avcodec_pix_fmt_to_codec_tag(pf AVPixelFormat) uint {
|
|
return uint(C.avcodec_pix_fmt_to_codec_tag((C.enum_AVPixelFormat)(pf)))
|
|
}
|
|
|
|
//int avcodec_get_pix_fmt_loss (enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, int has_alpha)
|
|
func Avcodec_get_pix_fmt_loss(p, f AVPixelFormat, a int) int {
|
|
return int(C.avcodec_get_pix_fmt_loss((C.enum_AVPixelFormat)(p), (C.enum_AVPixelFormat)(f), C.int(a)))
|
|
}
|
|
|
|
//Find the best pixel format to convert to given a certain source pixel format.
|
|
//enum AVPixelFormat avcodec_find_best_pix_fmt_of_list (const enum AVPixelFormat *pix_fmt_list, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
|
|
func Avcodec_find_best_pix_fmt_of_list(f *AVPixelFormat, s AVPixelFormat, a int, p *int) AVPixelFormat {
|
|
return (AVPixelFormat)(C.avcodec_find_best_pix_fmt_of_list((*C.enum_AVPixelFormat)(f), (C.enum_AVPixelFormat)(s), C.int(a), (*C.int)(unsafe.Pointer(p))))
|
|
}
|
|
|
|
//enum AVPixelFormat avcodec_find_best_pix_fmt_of_2 (enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
|
|
func Avcodec_find_best_pix_fmt_of_2(f1, f2, s AVPixelFormat, a int, l *int) AVPixelFormat {
|
|
return (AVPixelFormat)(C.avcodec_find_best_pix_fmt_of_2((C.enum_AVPixelFormat)(f1), (C.enum_AVPixelFormat)(f2), (C.enum_AVPixelFormat)(s), C.int(a), (*C.int)(unsafe.Pointer(l))))
|
|
}
|
|
|
|
//enum AVPixelFormat avcodec_default_get_format (struct AVCodecContext *s, const enum AVPixelFormat *fmt)
|
|
func Avcodec_default_get_format(ctxt *AVCodecContext, f *AVPixelFormat) AVPixelFormat {
|
|
return (AVPixelFormat)(C.avcodec_default_get_format((*C.struct_AVCodecContext)(ctxt), (*C.enum_AVPixelFormat)(f)))
|
|
}
|
|
|
|
//size_t av_get_codec_tag_string (char *buf, size_t buf_size, unsigned int codec_tag)
|
|
//Put a string representing the codec tag codec_tag in buf.
|
|
func Av_get_codec_tag_string(b string, bf uintptr, c uint) uintptr {
|
|
return uintptr(C.av_get_codec_tag_string(C.CString(b), C.size_t(bf), C.uint(c)))
|
|
}
|
|
|
|
//void avcodec_string (char *buf, int buf_size, AVCodecContext *enc, int encode)
|
|
func Avcodec_string(b string, bs int, ctxt *AVCodecContext, 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.
|
|
//const char *av_get_profile_name (const AVCodec *codec, int profile)
|
|
func Av_get_profile_name(c *AVCodec, p int) string {
|
|
return C.GoString(C.av_get_profile_name((*C.struct_AVCodec)(c), C.int(p)))
|
|
}
|
|
|
|
// //int avcodec_default_execute (AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
|
|
// func Avcodec_default_execute(ctxt AVCodecContext, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, s int){
|
|
// _,err := C.avcodec_default_execute(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, s int)
|
|
// }
|
|
|
|
// //int avcodec_default_execute2 (AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2, int, int), void *arg, int *ret, int count)
|
|
// func Avcodec_default_execute2(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2, int, int), void *arg, int *ret, int count){
|
|
// _,err := C.avcodec_default_execute2(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2, int, int), void *arg, int *ret, int count)
|
|
// }
|
|
|
|
//Fill AVFrame audio data and linesize pointers.
|
|
//int avcodec_fill_audio_frame (AVFrame *frame, int nb_channels, enum AVSampleFormat sample_fmt, const uint8_t *buf, int buf_size, int align)
|
|
func Avcodec_fill_audio_frame(f *AVFrame, 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)))
|
|
}
|
|
|
|
//Reset the internal decoder state / flush internal buffers.
|
|
//void avcodec_flush_buffers (AVCodecContext *avctx)
|
|
func Avcodec_flush_buffers(ctxt *AVCodecContext) {
|
|
C.avcodec_flush_buffers((*C.struct_AVCodecContext)(ctxt))
|
|
}
|
|
|
|
//Return codec bits per sample.
|
|
//int av_get_bits_per_sample (enum AVCodecID codec_id)
|
|
func Av_get_bits_per_sample(c AVCodecID) int {
|
|
return int(C.av_get_bits_per_sample((C.enum_AVCodecID)(c)))
|
|
}
|
|
|
|
//Return the PCM codec associated with a sample format.
|
|
//enum AVCodecID av_get_pcm_codec (enum AVSampleFormat fmt, int be)
|
|
func Av_get_pcm_codec(f AVSampleFormat, b int) AVCodecID {
|
|
return (AVCodecID)(C.av_get_pcm_codec((C.enum_AVSampleFormat)(f), C.int(b)))
|
|
}
|
|
|
|
//Return codec bits per sample.
|
|
//int av_get_exact_bits_per_sample (enum AVCodecID codec_id)
|
|
func Av_get_exact_bits_per_sample(c AVCodecID) int {
|
|
return int(C.av_get_exact_bits_per_sample((C.enum_AVCodecID)(c)))
|
|
}
|
|
|
|
//Return audio frame duration.
|
|
//int av_get_audio_frame_duration (AVCodecContext *avctx, int frame_bytes)
|
|
func Av_get_audio_frame_duration(ctxt *AVCodecContext, f int) int {
|
|
return int(C.av_get_audio_frame_duration((*C.struct_AVCodecContext)(ctxt), C.int(f)))
|
|
}
|
|
|
|
//Register a bitstream filter.
|
|
//void av_register_bitstream_filter (AVBitStreamFilter *bsf)
|
|
func Av_register_bitstream_filter(b *AVBitStreamFilter) {
|
|
C.av_register_bitstream_filter((*C.struct_AVBitStreamFilter)(b))
|
|
}
|
|
|
|
//Create and initialize a bitstream filter context given a bitstream filter name.
|
|
//AVBitStreamFilterContext *av_bitstream_filter_init (const char *name)
|
|
func Av_bitstream_filter_init(n string) *AVBitStreamFilterContext {
|
|
return (*AVBitStreamFilterContext)(C.av_bitstream_filter_init(C.CString(n)))
|
|
}
|
|
|
|
//Filter bitstream.
|
|
//int av_bitstream_filter_filter (AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
|
|
func Av_bitstream_filter_filter(bsctxt *AVBitStreamFilterContext, ctxt *AVCodecContext, a string, p **uint8, ps *int, b *uint8, bs, k int) int {
|
|
return int(C.av_bitstream_filter_filter((*C.struct_AVBitStreamFilterContext)(bsctxt), (*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.
|
|
//void av_bitstream_filter_close (AVBitStreamFilterContext *bsf)
|
|
func Av_bitstream_filter_close(bsctxt *AVBitStreamFilterContext) {
|
|
C.av_bitstream_filter_close((*C.struct_AVBitStreamFilterContext)(bsctxt))
|
|
}
|
|
|
|
//If f is NULL, return the first registered bitstream filter, if f is non-NULL, return the next registered bitstream filter after f, or NULL if f is the last one.
|
|
//AVBitStreamFilter *av_bitstream_filter_next (const AVBitStreamFilter *f)
|
|
func Av_bitstream_filter_next(f *AVBitStreamFilter) *AVBitStreamFilter {
|
|
return (*AVBitStreamFilter)(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.
|
|
//void av_fast_padded_malloc (void *ptr, unsigned int *size, size_t min_size)
|
|
func Av_fast_padded_malloc(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.
|
|
//void av_fast_padded_mallocz (void *ptr, unsigned int *size, size_t min_size)
|
|
func Av_fast_padded_mallocz(p unsafe.Pointer, s *uint, t uintptr) {
|
|
C.av_fast_padded_mallocz(p, (*C.uint)(unsafe.Pointer(s)), (C.size_t)(t))
|
|
}
|
|
|
|
//Encode extradata length to a buffer.
|
|
//unsigned int av_xiphlacing (unsigned char *s, unsigned int v)
|
|
func Av_xiphlacing(s *string, v uint) uint {
|
|
return uint(C.av_xiphlacing((*C.uchar)(unsafe.Pointer(s)), (C.uint)(v)))
|
|
}
|
|
|
|
//If hwaccel is NULL, returns the first registered hardware accelerator, if hwaccel is non-NULL,
|
|
//returns the next registered hardware accelerator after hwaccel, or NULL if hwaccel is the last one.
|
|
//AVHWAccel *av_hwaccel_next (const AVHWAccel *hwaccel)
|
|
func Av_hwaccel_next(a *AVHWAccel) *AVHWAccel {
|
|
return (*AVHWAccel)(C.av_hwaccel_next((*C.struct_AVHWAccel)(a)))
|
|
}
|
|
|
|
// //Register a user provided lock manager supporting the operations specified by AVLockOp.
|
|
// //int av_lockmgr_register (int(*cb)(void **mutex, enum AVLockOp op))
|
|
// func Av_lockmgr_register(int(*cb)(void **mutex, enum AVLockOp op)) int {
|
|
// return C.av_lockmgr_register(int(*cb)(void **mutex, enum AVLockOp op))
|
|
// }
|
|
|
|
//Get the type of the given codec.
|
|
//enum AVMediaType avcodec_get_type (enum AVCodecID codec_id)
|
|
func Avcodec_get_type(c AVCodecID) AVMediaType {
|
|
return (AVMediaType)(C.avcodec_get_type((C.enum_AVCodecID)(c)))
|
|
}
|
|
|
|
//Get the name of a codec.
|
|
//const char *avcodec_get_name (enum AVCodecID id)
|
|
func Avcodec_get_name(d AVCodecID) string {
|
|
return C.GoString(C.avcodec_get_name((C.enum_AVCodecID)(d)))
|
|
}
|
|
|
|
//int avcodec_is_open (AVCodecContext *s)
|
|
func Avcodec_is_open(ctxt *AVCodecContext) int {
|
|
return int(C.avcodec_is_open((*C.struct_AVCodecContext)(ctxt)))
|
|
}
|
|
|
|
//int av_codec_is_encoder (const AVCodec *codec)
|
|
func Av_codec_is_encoder(c *AVCodec) int {
|
|
return int(C.av_codec_is_encoder((*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//int av_codec_is_decoder (const AVCodec *codec)
|
|
func Av_codec_is_decoder(c *AVCodec) int {
|
|
return int(C.av_codec_is_decoder((*C.struct_AVCodec)(c)))
|
|
}
|
|
|
|
//const AVCodecDescriptor *avcodec_descriptor_get (enum AVCodecID id)
|
|
func Avcodec_descriptor_get(id AVCodecID) *AVCodecDescriptor {
|
|
return (*AVCodecDescriptor)(C.avcodec_descriptor_get((C.enum_AVCodecID)(id)))
|
|
}
|
|
|
|
//Iterate over all codec descriptors known to libavcodec.
|
|
//const AVCodecDescriptor *avcodec_descriptor_next (const AVCodecDescriptor *prev)
|
|
func Avcodec_descriptor_next(d *AVCodecDescriptor) *AVCodecDescriptor {
|
|
return (*AVCodecDescriptor)(C.avcodec_descriptor_next((*C.struct_AVCodecDescriptor)(d)))
|
|
}
|
|
|
|
//const AVCodecDescriptor *avcodec_descriptor_get_by_name (const char *name)
|
|
func Avcodec_descriptor_get_by_name(n string) *AVCodecDescriptor {
|
|
return (*AVCodecDescriptor)(C.avcodec_descriptor_get_by_name(C.CString(n)))
|
|
}
|