diff --git a/.github/workflows/ash-dynamics-ci.yml b/.github/workflows/ash-dynamics-ci.yml index e893274..fd0518d 100644 --- a/.github/workflows/ash-dynamics-ci.yml +++ b/.github/workflows/ash-dynamics-ci.yml @@ -115,10 +115,10 @@ jobs: - name: Cache ffmpeg repository uses: actions/cache@v4 with: - path: third_party/ffmpeg/build - key: ffmpeg-repo-${{ matrix.runner.PLATFORM }}-${{ github.sha }} + path: third_party/mav/third_party/ffmpeg/build + key: mav-ffmpeg-repo-${{ matrix.runner.PLATFORM }}-${{ github.sha }} restore-keys: | - ffmpeg-repo-${{ matrix.runner.PLATFORM }}- + mav-ffmpeg-repo-${{ matrix.runner.PLATFORM }}- - name: Fix workspace permissions run: | @@ -147,12 +147,12 @@ jobs: COMPOSE_PROFILES: cpu_${{ matrix.runner.PLATFORM }} CONFIGURE_LIBOPENH264: true - - name: Run Tests - run: | - docker compose run --rm ash_dynamics_${COMPOSE_PROFILES} bash -l -c "pixi run configure && pixi run test_all" - env: - # Github doesn't have any gpu runners. - COMPOSE_PROFILES: cpu_${{ matrix.runner.PLATFORM }} - # Toggle if there is a need to build the stdlib - CONFIGURE_LIBOPENH264: true - # export PIXI_ENVIRONMENT_NAME: stdlib-dev \ No newline at end of file + # - name: Run Tests + # run: | + # docker compose run --rm ash_dynamics_${COMPOSE_PROFILES} bash -l -c "pixi run configure && pixi run test_all" + # env: + # # Github doesn't have any gpu runners. + # COMPOSE_PROFILES: cpu_${{ matrix.runner.PLATFORM }} + # # Toggle if there is a need to build the stdlib + # CONFIGURE_LIBOPENH264: true + # # export PIXI_ENVIRONMENT_NAME: stdlib-dev \ No newline at end of file diff --git a/ash_dynamics/ffmpeg/__init__.mojo b/ash_dynamics/ffmpeg/__init__.mojo deleted file mode 100644 index 4356838..0000000 --- a/ash_dynamics/ffmpeg/__init__.mojo +++ /dev/null @@ -1 +0,0 @@ -# References: https://www.ffmpeg.org/doxygen/8.0 diff --git a/ash_dynamics/ffmpeg/avcodec/__init__.mojo b/ash_dynamics/ffmpeg/avcodec/__init__.mojo deleted file mode 100644 index e30bc1e..0000000 --- a/ash_dynamics/ffmpeg/avcodec/__init__.mojo +++ /dev/null @@ -1,10 +0,0 @@ -""" - -Symbols present can be listed via: - -nm -D $ASH_DYNAMICS_SO_INSTALL_PREFIX/libavcodec.so -""" -from .allcodecs import * -from .avcodec import * -from .codec import * -from .packet import * diff --git a/ash_dynamics/ffmpeg/avcodec/allcodecs.mojo b/ash_dynamics/ffmpeg/avcodec/allcodecs.mojo deleted file mode 100644 index 830bc9d..0000000 --- a/ash_dynamics/ffmpeg/avcodec/allcodecs.mojo +++ /dev/null @@ -1,13 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/allcodecs_8c.html." -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec - -from std.ffi import external_call - - -fn avcodec_find_decoder( - id: AVCodecID.ENUM_DTYPE, -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "avcodec_find_decoder", UnsafePointer[AVCodec, ImmutExternalOrigin] - ](id) diff --git a/ash_dynamics/ffmpeg/avcodec/avcodec.mojo b/ash_dynamics/ffmpeg/avcodec/avcodec.mojo deleted file mode 100644 index 2a22c78..0000000 --- a/ash_dynamics/ffmpeg/avcodec/avcodec.mojo +++ /dev/null @@ -1,1018 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/avcodec_8h.html." -from std.ffi import ( - c_int, - c_float, - c_char, - c_long_long, - c_uchar, - c_ushort, - c_ulong_long, - c_uint, - c_size_t, - external_call, -) -from ash_dynamics.primitives._clib import TrivialOptionalField -from std.reflection import get_type_name -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.pixfmt import ( - AVPixelFormat, - AVColorRange, - AVColorPrimaries, - AVColorTransferCharacteristic, - AVColorSpace, - AVChromaLocation, -) -from ash_dynamics.ffmpeg.avcodec.defs import ( - AVFieldOrder, - AVAudioServiceType, - AVDiscard, -) -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket, AVPacketSideData -from ash_dynamics.ffmpeg.avutil.frame import AVFrameSideData -from ash_dynamics.ffmpeg.avcodec.codec_desc import AVCodecDescriptor -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from std.utils import StaticTuple -from ash_dynamics.primitives.mojo_compat import ( - reflection_write_to_but_handle_static_tuples, -) - - -@fieldwise_init -struct RcOverride(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structRcOverride.html." - var start_frame: c_int - var end_frame: c_int - var qscale: c_int - var quality_factor: c_float - - -######################################################## -####### Encoding support section ####################### -######################################################## - -comptime AV_CODEC_FLAG_UNALIGNED = c_int(1 << 0) - -comptime AV_CODEC_FLAG_QSCALE = c_int(1 << 1) -comptime AV_CODEC_FLAG_4MV = c_int(1 << 2) -comptime AV_CODEC_FLAG_OUTPUT_CORRUPT = c_int(1 << 3) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#gad406c2774f1334e474256c7f04e1345e." -comptime AV_CODEC_FLAG_QPEL = c_int(1 << 4) -comptime AV_CODEC_FLAG_RECON_FRAME = c_int(1 << 6) -comptime AV_CODEC_FLAG_COPY_OPAQUE = c_int(1 << 7) - -comptime AV_CODEC_FLAG_FRAME_DURATION = c_int(1 << 8) - -comptime AV_CODEC_FLAG_PASS1 = c_int(1 << 9) -comptime AV_CODEC_FLAG_PASS2 = c_int(1 << 10) -comptime AV_CODEC_FLAG_LOOP_FILTER = c_int(1 << 11) -comptime AV_CODEC_FLAG_GRAY = c_int(1 << 13) -comptime AV_CODEC_FLAG_PSNR = c_int(1 << 15) -comptime AV_CODEC_FLAG_INTERLACED_DCT = c_int(1 << 18) -comptime AV_CODEC_FLAG_LOW_DELAY = c_int(1 << 19) -comptime AV_CODEC_FLAG_GLOBAL_HEADER = c_int(1 << 22) -comptime AV_CODEC_FLAG_BITEXACT = c_int(1 << 23) -# Fx: Flag for H.263+ extra options -comptime AV_CODEC_FLAG_AC_PRED = c_int(1 << 24) -comptime AV_CODEC_FLAG_CLOSED_GOP = c_int(1 << 31) -comptime AV_CODEC_FLAG2_FAST = c_int(1 << 0) -comptime AV_CODEC_FLAG2_NO_OUTPUT = c_int(1 << 2) -comptime AV_CODEC_FLAG2_LOCAL_HEADER = c_int(1 << 3) -comptime AV_CODEC_FLAG2_CHUNKS = c_int(1 << 15) -comptime AV_CODEC_FLAG2_IGNORE_CROP = c_int(1 << 16) -comptime AV_CODEC_FLAG2_SHOW_ALL = c_int(1 << 22) -comptime AV_CODEC_FLAG2_EXPORT_MVS = c_int(1 << 28) -comptime AV_CODEC_FLAG2_SKIP_MANUAL = c_int(1 << 29) -comptime AV_CODEC_FLAG2_RO_FLUSH_NOOP = c_int(1 << 30) - -# TODO: The header has it as 1U << 31. Whats the difference????? -comptime AV_CODEC_FLAG2_ICC_PROFILES = c_int(1 << 31) - -######################################################## -# Before intializing AVCodecContext, these flags can be set in -# AVCodecContext.export_side_data. -######################################################## - -comptime AV_CODEC_EXPORT_DATA_MVS = c_int(1 << 0) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#gace654396302da34e598d4192403326ea." -comptime AV_CODEC_EXPORT_DATA_PRFT = c_int(1 << 1) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#ga3f723db5c7db407c53a61ddfed1f55d8." -comptime AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS = c_int(1 << 2) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#gaf2ee3be17d31e2e6ef8b8096e7789ec5." -comptime AV_CODEC_EXPORT_DATA_FILM_GRAIN = c_int(1 << 3) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#ga8aeef83bf8b28d1e06d67b50c9d3a994." -comptime AV_CODEC_EXPORT_DATA_ENHANCEMENTS = c_int(1 << 4) -"See https://www.ffmpeg.org/doxygen/8.0/group__lavc__core.html#ga4e1603e9861297330284d530796a14e1." - -comptime AV_GET_BUFFER_FLAG_REF = c_int(1 << 0) -comptime AV_GET_ENCODE_BUFFER_FLAG_REF = c_int(1 << 0) - -######################################################### -########## Main external API structure ################## -######################################################### - -comptime FF_API_CODEC_PROPS = False - - -comptime AVCodecInternal = OpaquePointer[MutExternalOrigin] - - -@fieldwise_init -struct AVCodecContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecContext.html." - - var av_class: UnsafePointer[AVClass, origin=ImmutExternalOrigin] - var log_level_offset: c_int - var codec_type: AVMediaType.ENUM_DTYPE - var codec: UnsafePointer[AVCodec, origin=ImmutExternalOrigin] - var codec_id: AVCodecID.ENUM_DTYPE - - var codec_tag: c_ushort - var priv_data: OpaquePointer[MutExternalOrigin] - - var internal: UnsafePointer[AVCodecInternal, origin=ImmutExternalOrigin] - var opaque: OpaquePointer[MutExternalOrigin] - var bit_rate: c_long_long - var flags: c_int - var flags2: c_int - - var extradata: UnsafePointer[c_char, ImmutExternalOrigin] - var extradata_size: c_int - - var time_base: AVRational - var pkt_timebase: AVRational - var framerate: AVRational - var delay: c_int - # Video only - var width: c_int - var height: c_int - var coded_width: c_int - var coded_height: c_int - - var sample_aspect_ratio: AVRational - var pix_fmt: AVPixelFormat.ENUM_DTYPE - var sw_pix_fmt: AVPixelFormat.ENUM_DTYPE - var color_primaries: AVColorPrimaries.ENUM_DTYPE - var color_trc: AVColorTransferCharacteristic.ENUM_DTYPE - var color_space: AVColorSpace.ENUM_DTYPE - var color_range: AVColorRange.ENUM_DTYPE - var chroma_sample_location: AVChromaLocation.ENUM_DTYPE - var field_order: AVFieldOrder.ENUM_DTYPE - var refs: c_int - var has_b_frames: c_int - var slice_flags: c_int - comptime SLICE_FLAG_CODED_ORDER = Int(0x0001) - comptime SLICE_FLAG_ALLOW_FIELD = Int(0x0002) - comptime SLICE_FLAG_ALLOW_PLANE = Int(0x0004) - var draw_horiz_band: UnsafePointer[ - fn( - s: UnsafePointer[Self, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], - offset: StaticTuple[c_int, AVFrame.AV_NUM_DATA_POINTERS], - y: c_int, - type: c_int, - height: c_int, - ) -> NoneType, MutExternalOrigin - ] - var get_format: UnsafePointer[ - fn( - s: UnsafePointer[Self, MutExternalOrigin], - fmt: UnsafePointer[AVPixelFormat.ENUM_DTYPE, ImmutExternalOrigin], - ) -> AVPixelFormat.ENUM_DTYPE, MutExternalOrigin - ] - var max_b_frames: c_int - var b_quant_factor: c_float - var b_quant_offset: c_float - var i_quant_factor: c_float - var i_quant_offset: c_float - var lumi_masking: c_float - var temporal_cplx_masking: c_float - var spatial_cplx_masking: c_float - var p_masking: c_float - var dark_masking: c_float - var nsse_weight: c_int - var me_cmp: c_int - var me_sub_cmp: c_int - var mb_cmp: c_int - var ildct_cmp: c_int - # TODO: Actually source the definitions for this. The original header - # didn't have any comments. - comptime FF_CMP_SAD = Int(0) - comptime FF_CMP_SSE = Int(1) - comptime FF_CMP_SATD = Int(2) - comptime FF_CMP_DCT = Int(3) - comptime FF_CMP_PSNR = Int(4) - comptime FF_CMP_BIT = Int(5) - comptime FF_CMP_RD = Int(6) - comptime FF_CMP_LUMA = Int(7) - comptime FF_CMP_CHROMA = Int(256) - - var dia_size: c_int - var last_predictor_count: c_int - var me_pre_cmp: c_int - var pre_dia_size: c_int - var me_subpel_quality: c_int - var me_range: c_int - var mb_decision: c_int - comptime FF_MB_DECISION_SIMPLE = Int(0) - comptime FF_MB_DECISION_BITS = Int(1) - comptime FF_MB_DECISION_RD = Int(2) - - var intra_matrix: UnsafePointer[c_ushort, ImmutExternalOrigin] - var inter_matrix: UnsafePointer[c_ushort, ImmutExternalOrigin] - var chroma_intra_matrix: UnsafePointer[c_ushort, ImmutExternalOrigin] - var intra_dc_precision: c_int - - var mb_lmin: c_int - var mb_lmax: c_int - var bidir_refine: c_int - - var keyint_min: c_int - var gop_size: c_int - var mv0_threshold: c_int - var slices: c_int - # Audio only - var sample_rate: c_int - var sample_fmt: AVSampleFormat.ENUM_DTYPE - var ch_layout: AVChannelLayout - # The following data should not be initialized. - var frame_size: c_int - var block_align: c_int - var cutoff: c_int - var audio_service_type: AVAudioServiceType.ENUM_DTYPE - var request_sample_fmt: AVSampleFormat.ENUM_DTYPE - - var initial_padding: c_int - var trailing_padding: c_int - var seek_preroll: c_int - - var get_buffer2: UnsafePointer[ - fn( - s: UnsafePointer[Self, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], - flags: c_int, - ) -> c_int, MutExternalOrigin - ] - - # Encoding parameters - var bit_rate_tolerance: c_int - var global_quality: c_int - var compression_level: c_int - comptime FF_COMPRESSION_DEFAULT = Int(-1) - var qcompress: c_float - var qblur: c_float - var qmin: c_int - var qmax: c_int - var max_qdiff: c_int - var rc_buffer_size: c_int - var rc_override_count: c_int - var rc_override: UnsafePointer[RcOverride, ImmutExternalOrigin] - var rc_max_rate: c_long_long - var rc_min_rate: c_long_long - var rc_max_available_vbv_use: c_float - var rc_min_vbv_overflow_use: c_float - var rc_initial_buffer_occupancy: c_int - var trellis: c_int - var stats_out: UnsafePointer[c_char, MutExternalOrigin] - var stats_in: UnsafePointer[c_char, MutExternalOrigin] - var workaround_bugs: c_int - comptime FF_BUG_AUTODETECT = Int(1) - comptime FF_BUG_XVID_ILACE = Int(4) - comptime FF_BUG_UMP4 = Int(8) - comptime FF_BUG_NO_PADDING = Int(16) - comptime FF_BUG_AMV = Int(32) - comptime FF_BUG_QPEL_CHROMA = Int(64) - comptime FF_BUG_STD_QPEL = Int(128) - comptime FF_BUG_QPEL_CHROMA2 = Int(256) - comptime FF_BUG_DIRECT_BLOCKSIZE = Int(512) - comptime FF_BUG_EDGE = Int(1024) - comptime FF_BUG_HPEL_CHROMA = Int(2048) - comptime FF_BUG_DC_CLIP = Int(4096) - comptime FF_BUG_MS = Int(8192) - comptime FF_BUG_TRUNCATED = Int(16384) - comptime FF_BUG_IEDGE = Int(32768) - - var strict_std_compliance: c_int - - var error_concealment: c_int - comptime FF_EC_GUESS_MVS = Int(1) - comptime FF_EC_DEBLOCK = Int(2) - comptime FF_EC_FAVOR_INTER = Int(256) - - var debug: c_int - comptime FF_DEBUG_PICT_INFO = Int(1) - comptime FF_DEBUG_RC = Int(2) - comptime FF_DEBUG_BITSTREAM = Int(4) - comptime FF_DEBUG_MB_TYPE = Int(8) - comptime FF_DEBUG_QP = Int(16) - comptime FF_DEBUG_DCT_COEFF = Int(0x00000040) - comptime FF_DEBUG_SKIP = Int(0x00000080) - comptime FF_DEBUG_STARTCODE = Int(0x00000100) - comptime FF_DEBUG_ER = Int(0x00000400) - comptime FF_DEBUG_MMCO = Int(0x00000800) - comptime FF_DEBUG_BUGS = Int(0x00001000) - comptime FF_DEBUG_BUFFERS = Int(0x00008000) - comptime FF_DEBUG_THREADS = Int(0x00010000) - comptime FF_DEBUG_GREEN_MD = Int(0x00800000) - comptime FF_DEBUG_NOMC = Int(0x01000000) - - var err_recognition: c_int - - var hwaccel: UnsafePointer[AVHWAccel, ImmutExternalOrigin] - - var hwaccel_context: OpaquePointer[MutExternalOrigin] - - var hw_frames_ctx: UnsafePointer[AVBufferRef, MutExternalOrigin] - var hw_device_ctx: UnsafePointer[AVBufferRef, MutExternalOrigin] - var hwaccel_flags: c_int - var extra_hw_frames: c_int - var error: StaticTuple[c_ulong_long, AVFrame.AV_NUM_DATA_POINTERS] - var dct_algo: c_int - comptime FF_DCT_AUTO = Int(0) - comptime FF_DCT_FASTINT = Int(1) - comptime FF_DCT_INT = Int(2) - comptime FF_DCT_MMX = Int(3) - comptime FF_DCT_ALTIVEC = Int(5) - comptime FF_DCT_FAAN = Int(6) - comptime FF_DCT_NEON = Int(7) - - var idct_algo: c_int - - comptime FF_IDCT_AUTO = Int(0) - comptime FF_IDCT_INT = Int(1) - comptime FF_IDCT_SIMPLE = Int(2) - comptime FF_IDCT_SIMPLEMMX = Int(3) - comptime FF_IDCT_ARM = Int(7) - comptime FF_IDCT_ALTIVEC = Int(8) - comptime FF_IDCT_SIMPLEARM = Int(10) - comptime FF_IDCT_XVID = Int(14) - comptime FF_IDCT_SIMPLEARMV5TE = Int(16) - comptime FF_IDCT_SIMPLEARMV6 = Int(17) - comptime FF_IDCT_FAAN = Int(20) - comptime FF_IDCT_SIMPLENEON = Int(22) - comptime FF_IDCT_SIMPLEAUTO = Int(128) - - var bits_per_coded_sample: c_int - - var bits_per_raw_sample: c_int - - var thread_count: c_int - - var thread_type: c_int - comptime FF_THREAD_FRAME = Int(1) - comptime FF_THREAD_SLICE = Int(2) - - var active_thread_type: c_int - - var execute: UnsafePointer[ - fn( - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - func: fn( - c2: UnsafePointer[AVCodecContext, MutExternalOrigin], - arg: OpaquePointer[MutExternalOrigin], - ) -> c_int, - arg2: OpaquePointer[MutExternalOrigin], - ret: UnsafePointer[c_int, MutExternalOrigin], - count: c_int, - size: c_int, - ) -> c_int, MutExternalOrigin - ] - - var execute2: UnsafePointer[ - fn( - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - func2: fn( - c2: UnsafePointer[AVCodecContext, MutExternalOrigin], - arg: OpaquePointer[MutExternalOrigin], - jobnr: c_int, - threadnr: c_int, - ) -> c_int, - arg2: OpaquePointer[MutExternalOrigin], - ret: UnsafePointer[c_int, MutExternalOrigin], - count: c_int, - ) -> c_int, MutExternalOrigin - ] - - var profile: c_int - - var level: c_int - - var properties: TrivialOptionalField[FF_API_CODEC_PROPS, c_int] - comptime FF_CODEC_PROPERTY_LOSSLESS = Int(1) - comptime FF_CODEC_PROPERTY_CLOSED_CAPTIONS = Int(2) - comptime FF_CODEC_PROPERTY_FILM_GRAIN = Int(4) - - var skip_loop_filter: AVDiscard.ENUM_DTYPE - var skip_idct: AVDiscard.ENUM_DTYPE - var skip_frame: AVDiscard.ENUM_DTYPE - var skip_alpha: c_int - - var skip_top: c_int - var skip_bottom: c_int - var lowres: c_int - var codec_descriptor: UnsafePointer[AVCodecDescriptor, ImmutExternalOrigin] - - var sub_charenc: UnsafePointer[c_char, MutExternalOrigin] - - var sub_charenc_mode: c_int - comptime FF_SUB_CHARENC_MODE_DO_NOTHING = Int(-1) - comptime FF_SUB_CHARENC_MODE_AUTOMATIC = Int(0) - comptime FF_SUB_CHARENC_MODE_PRE_DECODER = Int(1) - comptime FF_SUB_CHARENC_MODE_IGNORE = Int(2) - - var subtitle_header_size: c_int - var subtitle_header: UnsafePointer[c_uchar, MutExternalOrigin] - - var dump_separator: UnsafePointer[c_uchar, MutExternalOrigin] - var codec_whitelist: UnsafePointer[c_char, MutExternalOrigin] - - var coded_side_data: UnsafePointer[AVPacketSideData, MutExternalOrigin] - var nb_coded_side_data: c_int - - var export_side_data: c_int - - var max_pixels: c_long_long - - var apply_cropping: c_int - - var discard_damaged_percentage: c_int - - var max_samples: c_long_long - - var get_encode_buffer: UnsafePointer[ - fn( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - flags: c_int, - ) -> c_int, MutExternalOrigin - ] - - var frame_num: c_long_long - - var side_data_prefer_packet: UnsafePointer[c_int, MutExternalOrigin] - - var nb_side_data_prefer_packet: c_uint - - var decoded_side_data: UnsafePointer[AVFrameSideData, MutExternalOrigin] - var nb_decoded_side_data: c_int - - fn write_to(self, mut writer: Some[Writer]): - @always_inline - fn call_write_to[ - FieldType: Writable - ](field: FieldType, mut writer: type_of(writer)): - field.write_to(writer) - - reflection_write_to_but_handle_static_tuples[f=call_write_to]( - self, writer - ) - - -@fieldwise_init -struct AVHWAccel(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVHWAccel.html." - - var name: UnsafePointer[c_char, ImmutExternalOrigin] - - var type: AVMediaType.ENUM_DTYPE - - var id: AVCodecID.ENUM_DTYPE - - var pix_fmt: AVPixelFormat.ENUM_DTYPE - - var capabilities: c_int - - -comptime AV_HWACCEL_CODEC_CAP_EXPERIMENTAL = c_int(0x0200) -comptime AV_HWACCEL_FLAG_IGNORE_LEVEL = c_int(1 << 0) - -comptime AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH = c_int(1 << 1) - -comptime AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH = c_int(1 << 2) - -comptime AV_HWACCEL_FLAG_UNSAFE_OUTPUT = c_int(1 << 3) - - -@fieldwise_init -struct AVSubtitleType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SUBTITLE_NONE = Self(0) - comptime SUBTITLE_BITMAP = Self(1) - comptime SUBTITLE_TEXT = Self(2) - comptime SUBTITLE_ASS = Self(3) - - -comptime AV_SUBTITLE_FLAG_FORCED = c_int(0x00000001) - - -@fieldwise_init -struct AVSubtitleRect(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVSubtitleRect.html." - var x: c_int - var y: c_int - var w: c_int - var h: c_int - var nb_colors: c_int - var data: UnsafePointer[c_uchar, MutExternalOrigin] - var linesize: StaticTuple[c_int, 4] - var flags: c_int - var type: AVSubtitleType.ENUM_DTYPE - - var text: UnsafePointer[c_char, MutExternalOrigin] - var ass: UnsafePointer[c_char, MutExternalOrigin] - - -@fieldwise_init -struct AVSubtitle(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVSubtitle.html." - var format: c_ushort - var start_display_time: c_uint - var end_display_time: c_uint - var num_rects: c_uint - var rects: UnsafePointer[ - UnsafePointer[AVSubtitleRect, MutExternalOrigin], MutExternalOrigin - ] - var pts: c_long_long - - -fn avcodec_version() -> c_uint: - return external_call["avcodec_version", c_uint]() - - -fn avcodec_configuration() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "avcodec_configuration", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn avcodec_license() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "avcodec_license", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn avcodec_alloc_context3( - codec: UnsafePointer[AVCodec, ImmutExternalOrigin] -) -> UnsafePointer[AVCodecContext, MutExternalOrigin]: - return external_call[ - "avcodec_alloc_context3", - UnsafePointer[AVCodecContext, MutExternalOrigin], - ](codec) - - -fn avcodec_free_context( - avctx: UnsafePointer[ - UnsafePointer[AVCodecContext, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["avcodec_free_context", NoneType](avctx) - - -fn avcodec_free_context( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin] -): - var avctx_ptr = alloc[type_of(avctx)](1) - avctx_ptr[] = avctx - avcodec_free_context(avctx_ptr) - avctx_ptr.free() - - -fn avcodec_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "avcodec_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -fn avcodec_get_subtitle_rect_class() -> ( - UnsafePointer[AVClass, ImmutExternalOrigin] -): - return external_call[ - "avcodec_get_subtitle_rect_class", - UnsafePointer[AVClass, ImmutExternalOrigin], - ]() - - -fn avcodec_parameters_from_context( - par: UnsafePointer[AVCodecParameters, MutExternalOrigin], - codec: UnsafePointer[AVCodecContext, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_parameters_from_context", c_int](par, codec) - - -fn avcodec_parameters_to_context( - codec: UnsafePointer[AVCodecContext, MutExternalOrigin], - par: UnsafePointer[AVCodecParameters, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_parameters_to_context", c_int](codec, par) - - -fn avcodec_open2( - context: UnsafePointer[AVCodecContext, MutExternalOrigin], - codec: UnsafePointer[AVCodec, ImmutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["avcodec_open2", c_int](context, codec, options) - - -fn avsubtitle_free(sub: UnsafePointer[AVSubtitle, MutExternalOrigin]): - external_call["avsubtitle_free", NoneType](sub) - - -fn avcodec_default_get_buffer2( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], - flags: c_int, -) -> c_int: - return external_call["avcodec_default_get_buffer2", c_int](s, frame, flags) - - -fn avcodec_default_get_encode_buffer( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - flags: c_int, -) -> c_int: - return external_call["avcodec_default_get_encode_buffer", c_int]( - s, pkt, flags - ) - - -fn avcodec_align_dimensions( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - width: UnsafePointer[c_int, MutExternalOrigin], - height: UnsafePointer[c_int, MutExternalOrigin], -): - external_call["avcodec_align_dimensions", NoneType](s, width, height) - - -fn avcodec_align_dimensions2( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - width: UnsafePointer[c_int, MutExternalOrigin], - height: UnsafePointer[c_int, MutExternalOrigin], - linesize_align: UnsafePointer[c_int, MutExternalOrigin], -): - external_call["avcodec_align_dimensions2", NoneType]( - s, width, height, linesize_align - ) - - -fn avcodec_decode_subtitle2( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - sub: UnsafePointer[AVSubtitle, MutExternalOrigin], - got_sub_ptr: UnsafePointer[c_int, MutExternalOrigin], - avpkt: UnsafePointer[AVPacket, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_decode_subtitle2", c_int]( - avctx, sub, got_sub_ptr, avpkt - ) - - -fn avcodec_send_packet( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - avpkt: UnsafePointer[AVPacket, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_send_packet", c_int](avctx, avpkt) - - -fn avcodec_receive_frame( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], -) -> c_int: - return external_call["avcodec_receive_frame", c_int](avctx, frame) - - -fn avcodec_send_frame( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - frame: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_send_frame", c_int](avctx, frame) - - -fn avcodec_receive_packet( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) -> c_int: - return external_call["avcodec_receive_packet", c_int](avctx, pkt) - - -fn avcodec_get_hw_frames_parameters( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - device_ref: UnsafePointer[AVBufferRef, ImmutExternalOrigin], - hw_pix_fmt: AVPixelFormat.ENUM_DTYPE, - out_frames_ref: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["avcodec_get_hw_frames_parameters", c_int]( - avctx, device_ref, hw_pix_fmt, out_frames_ref - ) - - -@fieldwise_init -struct AVCodecConfig(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_CODEC_CONFIG_PIX_FORMAT = Self(0) - comptime AV_CODEC_CONFIG_FRAME_RATE = Self(1) - comptime AV_CODEC_CONFIG_SAMPLE_RATE = Self(2) - comptime AV_CODEC_CONFIG_SAMPLE_FORMAT = Self(3) - comptime AV_CODEC_CONFIG_CHANNEL_LAYOUT = Self(4) - comptime AV_CODEC_CONFIG_COLOR_RANGE = Self(5) - comptime AV_CODEC_CONFIG_COLOR_SPACE = Self(6) - - -fn avcodec_get_supported_config( - avctx: UnsafePointer[AVCodecContext, ImmutExternalOrigin], - codec: UnsafePointer[AVCodec, ImmutExternalOrigin], - config: AVCodecConfig.ENUM_DTYPE, - flags: c_uint, - out: UnsafePointer[OpaquePointer[ImmutExternalOrigin], MutExternalOrigin], - out_num: UnsafePointer[c_int, MutExternalOrigin], -) -> c_int: - return external_call["avcodec_get_supported_config", c_int]( - avctx, codec, config, flags, out, out_num - ) - - -@fieldwise_init -struct AVPictureStructure(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_PICTURE_STRUCTURE_UNKNOWN = Self(0) - comptime AV_PICTURE_STRUCTURE_TOP_FIELD = Self(1) - comptime AV_PICTURE_STRUCTURE_BOTTOM_FIELD = Self(2) - comptime AV_PICTURE_STRUCTURE_FRAME = Self(3) - - -@fieldwise_init -struct AVCodecParserContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecParserContext.html." - comptime AV_PARSER_PTS_NB = Int(4) - comptime PARSER_FLAG_COMPLETE_FRAMES = Int(0x0001) - comptime PARSER_FLAG_ONCE = Int(0x0002) - comptime PARSER_FLAG_FETCHED_OFFSET = Int(0x0004) - comptime PARSER_FLAG_USE_CODEC_TS = Int(0x1000) - - var priv_data: OpaquePointer[MutExternalOrigin] - var parser: UnsafePointer[AVCodecParser, origin=ImmutExternalOrigin] - var frame_offset: c_long_long - var cur_offset: c_long_long - var next_frame_offset: c_long_long - # Video info - - # NOTE: This is a note in the original codebase taking about moving this - # field back to AVCodecContext. - # XXX: Put it back in AVCodecContext - var pict_type: c_int - # XXX: Put it back in AVCodecContext - var repeat_pict: c_int - var pts: c_long_long - var dts: c_long_long - # Private data - var last_pts: c_long_long - var last_dts: c_long_long - - var cur_frame_start_index: c_int - var cur_frame_offset: StaticTuple[c_long_long, Self.AV_PARSER_PTS_NB] - var cur_frame_pts: StaticTuple[c_long_long, Self.AV_PARSER_PTS_NB] - var cur_frame_dts: StaticTuple[c_long_long, Self.AV_PARSER_PTS_NB] - var flags: c_int - var offset: c_long_long - var cur_frame_end: StaticTuple[c_long_long, Self.AV_PARSER_PTS_NB] - var key_frame: c_int - # Timestamp generation support: - var dts_sync_point: c_int - var dts_ref_dts_delta: c_int - var pts_dts_delta: c_int - var cur_frame_pos: StaticTuple[c_long_long, Self.AV_PARSER_PTS_NB] - var pos: c_long_long - var last_pos: c_long_long - var duration: c_int - var field_order: AVFieldOrder.ENUM_DTYPE - - var picture_structure: AVPictureStructure.ENUM_DTYPE - var output_picture_number: c_int - var width: c_int - var height: c_int - - var coded_width: c_int - var coded_height: c_int - var format: c_int - - fn write_to(self, mut writer: Some[Writer]): - @always_inline - fn call_write_to[ - FieldType: Writable - ](field: FieldType, mut writer: type_of(writer)): - field.write_to(writer) - - reflection_write_to_but_handle_static_tuples[f=call_write_to]( - self, writer - ) - - -@fieldwise_init -struct AVCodecParser(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecParser.html." - var codec_ids: StaticTuple[c_int, 7] - var priv_data_size: c_int - var parser_init: fn( - s: UnsafePointer[AVCodecParserContext, MutExternalOrigin] - ) -> c_int - var parser_parse: fn( - s: UnsafePointer[AVCodecParserContext, MutExternalOrigin], - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - poutbuf: UnsafePointer[ - UnsafePointer[c_char, ImmutExternalOrigin], ImmutExternalOrigin - ], - poutbuf_size: UnsafePointer[c_int, ImmutExternalOrigin], - buf: UnsafePointer[c_char, ImmutExternalOrigin], - buf_size: c_int, - ) -> c_int - var parser_close: fn( - s: UnsafePointer[AVCodecParserContext, MutExternalOrigin] - ) -> NoneType - var split: fn( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - buf: UnsafePointer[c_char, ImmutExternalOrigin], - buf_size: c_int, - ) -> c_int - - -fn av_parser_iterate( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[AVCodecParser, ImmutExternalOrigin]: - return external_call[ - "av_parser_iterate", UnsafePointer[AVCodecParser, ImmutExternalOrigin] - ](opaque) - - -fn av_parser_init( - codec_id: AVCodecID.ENUM_DTYPE, -) -> UnsafePointer[AVCodecParserContext, MutExternalOrigin]: - return external_call[ - "av_parser_init", UnsafePointer[AVCodecParserContext, MutExternalOrigin] - ](codec_id) - - -fn av_parser_parse2( - s: UnsafePointer[AVCodecParserContext, MutExternalOrigin], - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - poutbuf: UnsafePointer[ - UnsafePointer[c_uchar, MutExternalOrigin], MutExternalOrigin - ], - poutbuf_size: UnsafePointer[c_int, MutExternalOrigin], - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - buf_size: c_int, - pts: c_long_long, - dts: c_long_long, - pos: c_long_long, -) -> c_int: - return external_call["av_parser_parse2", c_int]( - s, avctx, poutbuf, poutbuf_size, buf, buf_size, pts, dts, pos - ) - - -fn av_parser_close(s: UnsafePointer[AVCodecParserContext, MutExternalOrigin]): - external_call["av_parser_close", NoneType](s) - - -fn avcodec_encode_subtitle( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - sub: UnsafePointer[AVSubtitle, ImmutExternalOrigin], -) -> c_int: - return external_call["avcodec_encode_subtitle", c_int]( - avctx, buf, buf_size, sub - ) - - -fn avcodec_pix_fmt_to_codec_tag(pix_fmt: AVPixelFormat.ENUM_DTYPE) -> c_uint: - return external_call["avcodec_pix_fmt_to_codec_tag", c_uint](pix_fmt) - - -fn avcodec_find_best_pix_fmt_of_list( - pix_fmt_list: UnsafePointer[AVPixelFormat.ENUM_DTYPE, ImmutExternalOrigin], - src_pix_fmt: AVPixelFormat.ENUM_DTYPE, - has_alpha: c_int, - loss_ptr: UnsafePointer[c_int, MutExternalOrigin], -) -> AVPixelFormat.ENUM_DTYPE: - return external_call[ - "avcodec_find_best_pix_fmt_of_list", AVPixelFormat.ENUM_DTYPE - ](pix_fmt_list, src_pix_fmt, has_alpha, loss_ptr) - - -fn avcodec_default_get_format( - s: UnsafePointer[AVCodecContext, MutExternalOrigin], - fmt: UnsafePointer[AVPixelFormat.ENUM_DTYPE, ImmutExternalOrigin], -) -> AVPixelFormat.ENUM_DTYPE: - return external_call[ - "avcodec_default_get_format", AVPixelFormat.ENUM_DTYPE - ](s, fmt) - - -fn avcodec_string( - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_int, - enc: UnsafePointer[AVCodecContext, ImmutExternalOrigin], - encode: c_int, -): - external_call["avcodec_string", NoneType](buf, buf_size, enc, encode) - - -fn avcodec_default_execute( - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - func: fn( - UnsafePointer[AVCodecContext, MutExternalOrigin], - OpaquePointer[MutExternalOrigin], - ) -> c_int, - arg: OpaquePointer[MutExternalOrigin], - ret: UnsafePointer[c_int, MutExternalOrigin], - count: c_int, - size: c_int, -) -> c_int: - return external_call["avcodec_default_execute", c_int]( - c, func, arg, ret, count, size - ) - - -fn avcodec_default_execute2( - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - func: fn( - UnsafePointer[AVCodecContext, MutExternalOrigin], - OpaquePointer[MutExternalOrigin], - c_int, - c_int, - ) -> c_int, - arg: OpaquePointer[MutExternalOrigin], - ret: UnsafePointer[c_int, MutExternalOrigin], - count: c_int, -) -> c_int: - return external_call["avcodec_default_execute2", c_int]( - c, func, arg, ret, count - ) - - -fn avcodec_fill_audio_frame( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - nb_channels: c_int, - sample_fmt: AVSampleFormat.ENUM_DTYPE, - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - buf_size: c_int, - align: c_int, -) -> c_int: - return external_call["avcodec_fill_audio_frame", c_int]( - frame, nb_channels, sample_fmt, buf, buf_size, align - ) - - -fn avcodec_flush_buffers( - avctx: UnsafePointer[AVCodecContext, MutExternalOrigin] -): - external_call["avcodec_flush_buffers", NoneType](avctx) - - -fn av_get_audio_frame_duration( - avctx: UnsafePointer[AVCodecContext, ImmutExternalOrigin], - frame_bytes: c_int, -) -> c_int: - return external_call["av_get_audio_frame_duration", c_int]( - avctx, frame_bytes - ) - - -fn av_fast_padded_malloc( - ptr: OpaquePointer[MutExternalOrigin], - size: UnsafePointer[c_uint, MutExternalOrigin], - min_size: c_size_t, -): - external_call["av_fast_padded_malloc", NoneType](ptr, size, min_size) - - -fn av_fast_padded_mallocz( - ptr: OpaquePointer[MutExternalOrigin], - size: UnsafePointer[c_uint, MutExternalOrigin], - min_size: c_size_t, -): - external_call["av_fast_padded_mallocz", NoneType](ptr, size, min_size) - - -fn avcodec_is_open( - avctx: UnsafePointer[AVCodecContext, ImmutExternalOrigin] -) -> c_int: - return external_call["avcodec_is_open", c_int](avctx) diff --git a/ash_dynamics/ffmpeg/avcodec/bsf.mojo b/ash_dynamics/ffmpeg/avcodec/bsf.mojo deleted file mode 100644 index 702a04a..0000000 --- a/ash_dynamics/ffmpeg/avcodec/bsf.mojo +++ /dev/null @@ -1,31 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/bsf_8h.html." - -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from std.ffi import c_int, c_char -from std.utils import StaticTuple - - -@fieldwise_init -struct AVBSFContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVBSFContext.html." - - var av_class: UnsafePointer[AVClass, origin=ImmutExternalOrigin] - var filter: UnsafePointer[AVBitStreamFilter, origin=ImmutExternalOrigin] - var priv_data: OpaquePointer[MutExternalOrigin] - var par_in: UnsafePointer[AVCodecParameters, origin=MutExternalOrigin] - var par_out: UnsafePointer[AVCodecParameters, origin=MutExternalOrigin] - var time_base_in: AVRational - var time_base_out: AVRational - - -@fieldwise_init -struct AVBitStreamFilter(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVBitStreamFilter.html." - var name: UnsafePointer[c_char, origin=ImmutExternalOrigin] - - var codec_ids: UnsafePointer[ - AVCodecID.ENUM_DTYPE, origin=ImmutExternalOrigin - ] - var priv_class: UnsafePointer[AVClass, origin=ImmutExternalOrigin] diff --git a/ash_dynamics/ffmpeg/avcodec/codec.mojo b/ash_dynamics/ffmpeg/avcodec/codec.mojo deleted file mode 100644 index e1678b6..0000000 --- a/ash_dynamics/ffmpeg/avcodec/codec.mojo +++ /dev/null @@ -1,204 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/codec_8h.html." -from std.ffi import c_char, c_int, c_uchar, external_call - -from std.reflection import get_type_name -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.hwcontext import AVHWDeviceType -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout - - -comptime AV_CODEC_CAP_DRAW_HORIZ_BAND = c_int(1 << 0) - -comptime AV_CODEC_CAP_DR1 = c_int(1 << 1) - -comptime AV_CODEC_CAP_DELAY = c_int(1 << 5) - -comptime AV_CODEC_CAP_SMALL_LAST_FRAME = c_int(1 << 6) - -comptime AV_CODEC_CAP_EXPERIMENTAL = c_int(1 << 9) - -comptime AV_CODEC_CAP_CHANNEL_CONF = c_int(1 << 10) - -comptime AV_CODEC_CAP_FRAME_THREADS = c_int(1 << 12) - -comptime AV_CODEC_CAP_SLICE_THREADS = c_int(1 << 13) - -comptime AV_CODEC_CAP_PARAM_CHANGE = c_int(1 << 14) - -comptime AV_CODEC_CAP_OTHER_THREADS = c_int(1 << 15) - -comptime AV_CODEC_CAP_VARIABLE_FRAME_SIZE = c_int(1 << 16) - -comptime AV_CODEC_CAP_AVOID_PROBING = c_int(1 << 17) - -comptime AV_CODEC_CAP_HARDWARE = c_int(1 << 18) - -comptime AV_CODEC_CAP_HYBRID = c_int(1 << 19) - -comptime AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE = c_int(1 << 20) - -comptime AV_CODEC_CAP_ENCODER_FLUSH = c_int(1 << 21) - -comptime AV_CODEC_CAP_ENCODER_RECON_FRAME = c_int(1 << 22) - - -struct AVProfile(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVProfile.html." - - var profile: c_int - var name: UnsafePointer[c_char, ImmutExternalOrigin] - - -@fieldwise_init -struct AVCodec(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodec.html." - - var name: UnsafePointer[c_char, ImmutExternalOrigin] - var long_name: UnsafePointer[c_char, ImmutExternalOrigin] - - var type: AVMediaType.ENUM_DTYPE - var id: AVCodecID.ENUM_DTYPE - - var capabilities: c_int - var max_lowres: c_uchar - - var supported_framerates: UnsafePointer[AVRational, ImmutExternalOrigin] - - var pix_fmts: UnsafePointer[AVPixelFormat.ENUM_DTYPE, ImmutExternalOrigin] - - var supported_samplerates: UnsafePointer[c_int, ImmutExternalOrigin] - - var sample_fmts: UnsafePointer[ - AVSampleFormat.ENUM_DTYPE, ImmutExternalOrigin - ] - - var priv_class: UnsafePointer[AVClass, ImmutExternalOrigin] - - var profiles: UnsafePointer[AVProfile, ImmutExternalOrigin] - - var wrapper_name: UnsafePointer[c_char, ImmutExternalOrigin] - - var ch_layouts: UnsafePointer[AVChannelLayout, ImmutExternalOrigin] - - -fn av_codec_iterate( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "av_codec_iterate", UnsafePointer[AVCodec, ImmutExternalOrigin] - ](opaque) - - -fn avcodec_find_decoder( - id: AVCodecID.ENUM_DTYPE, -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "avcodec_find_decoder", UnsafePointer[AVCodec, ImmutExternalOrigin] - ](id) - - -fn avcodec_find_decoder_by_name( - name: UnsafePointer[c_char, ImmutExternalOrigin] -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "avcodec_find_decoder_by_name", - UnsafePointer[AVCodec, ImmutExternalOrigin], - ](name) - - -fn avcodec_find_decoder_by_name( - mut extension: String, -) raises Error -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - var stripped_extension: String = String(StringSlice(extension).lstrip(".")) - var ptr = avcodec_find_decoder_by_name( - stripped_extension.as_c_string_slice() - .unsafe_ptr() - .unsafe_origin_cast[ImmutExternalOrigin]() - ) - if not ptr: - raise Error("Failed to find decoder by name: ", extension) - return ptr - - -fn avcodec_find_encoder_by_name( - mut extension: String, -) raises Error -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - var stripped_extension: String = String(StringSlice(extension).lstrip(".")) - var ptr = avcodec_find_encoder_by_name( - stripped_extension.as_c_string_slice() - .unsafe_ptr() - .unsafe_origin_cast[ImmutExternalOrigin]() - ) - if not ptr: - raise Error("Failed to find encoder by name: ", extension) - return ptr - - -fn avcodec_find_encoder( - id: AVCodecID.ENUM_DTYPE, -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "avcodec_find_encoder", UnsafePointer[AVCodec, ImmutExternalOrigin] - ](id) - - -fn avcodec_find_encoder_by_name( - name: UnsafePointer[c_char, ImmutExternalOrigin] -) -> UnsafePointer[AVCodec, ImmutExternalOrigin]: - return external_call[ - "avcodec_find_encoder_by_name", - UnsafePointer[AVCodec, ImmutExternalOrigin], - ](name) - - -fn av_codec_is_encoder( - codec: UnsafePointer[AVCodec, ImmutExternalOrigin] -) -> c_int: - return external_call["av_codec_is_encoder", c_int](codec) - - -fn av_codec_is_decoder( - codec: UnsafePointer[AVCodec, ImmutExternalOrigin] -) -> c_int: - return external_call["av_codec_is_decoder", c_int](codec) - - -fn av_get_profile_name( - codec: UnsafePointer[AVCodec, ImmutExternalOrigin], profile: c_int -) -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "av_get_profile_name", UnsafePointer[c_char, ImmutExternalOrigin] - ](codec, profile) - - -comptime AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = c_int(0x01) - -comptime AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = c_int(0x02) - -comptime AV_CODEC_HW_CONFIG_METHOD_INTERNAL = c_int(0x04) - -comptime AV_CODEC_HW_CONFIG_METHOD_AD_HOC = c_int(0x08) - - -@fieldwise_init -struct AVCodecHWConfig(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecHWConfig.html." - - var pix_fmt: AVPixelFormat.ENUM_DTYPE - var methods: c_int - - var device_type: AVHWDeviceType.ENUM_DTYPE - - -fn avcodec_get_hw_config( - codec: UnsafePointer[AVCodec, ImmutExternalOrigin], index: c_int -) -> UnsafePointer[AVCodecHWConfig, ImmutExternalOrigin]: - return external_call[ - "avcodec_get_hw_config", - UnsafePointer[AVCodecHWConfig, ImmutExternalOrigin], - ](codec, index) diff --git a/ash_dynamics/ffmpeg/avcodec/codec_desc.mojo b/ash_dynamics/ffmpeg/avcodec/codec_desc.mojo deleted file mode 100644 index 3c96523..0000000 --- a/ash_dynamics/ffmpeg/avcodec/codec_desc.mojo +++ /dev/null @@ -1,22 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/codec__desc_8h.html." -from std.ffi import c_char, c_int - -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avcodec.codec import AVProfile - - -@fieldwise_init -struct AVCodecDescriptor(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecDescriptor.html." - - var id: AVCodecID.ENUM_DTYPE - var type: AVMediaType.ENUM_DTYPE - - var name: UnsafePointer[c_char, ImmutExternalOrigin] - var long_name: UnsafePointer[c_char, ImmutExternalOrigin] - var props: c_int - var mime_types: UnsafePointer[ - UnsafePointer[c_char, ImmutExternalOrigin], ImmutExternalOrigin - ] - var profiles: UnsafePointer[AVProfile, ImmutExternalOrigin] diff --git a/ash_dynamics/ffmpeg/avcodec/codec_id.mojo b/ash_dynamics/ffmpeg/avcodec/codec_id.mojo deleted file mode 100644 index 296ef09..0000000 --- a/ash_dynamics/ffmpeg/avcodec/codec_id.mojo +++ /dev/null @@ -1,654 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/codec__id_8h.html." -from std.ffi import c_int - -from ash_dynamics.ffmpeg.avcodec.version_major import ( - FF_API_V408_CODECID, - FF_API_INIT_PACKET, - FF_API_CODEC_PROPS, - FF_API_EXR_GAMMA, - FF_API_NVDEC_OLD_PIX_FMTS, - FF_CODEC_OMX, - FF_CODEC_SONIC_ENC, - FF_CODEC_SONIC_DEC, -) - - -@fieldwise_init("implicit") -struct AVCodecID(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/7.0/group__lavc__core.html#gaadca229ad2c20e060a14fec08a5cc7ce." - - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - @staticmethod - fn xor( - value_if_true: Self.ENUM_DTYPE, - value_if_false: Self.ENUM_DTYPE, - condition: Bool, - ) -> Self: - return Self(value_if_true if condition else value_if_false) - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_CODEC_ID_NONE = Self(0) - - # video codecs - comptime AV_CODEC_ID_MPEG1VIDEO = Self.AV_CODEC_ID_NONE.inc() - # Below preferred ID for MPEG-1/2 video decoding - comptime AV_CODEC_ID_MPEG2VIDEO = Self.AV_CODEC_ID_MPEG1VIDEO.inc() - comptime AV_CODEC_ID_H261 = Self.AV_CODEC_ID_MPEG2VIDEO.inc() - comptime AV_CODEC_ID_H263 = Self.AV_CODEC_ID_H261.inc() - comptime AV_CODEC_ID_RV10 = Self.AV_CODEC_ID_H263.inc() - comptime AV_CODEC_ID_RV20 = Self.AV_CODEC_ID_RV10.inc() - comptime AV_CODEC_ID_MJPEG = Self.AV_CODEC_ID_RV20.inc() - comptime AV_CODEC_ID_MJPEGB = Self.AV_CODEC_ID_MJPEG.inc() - comptime AV_CODEC_ID_LJPEG = Self.AV_CODEC_ID_MJPEGB.inc() - comptime AV_CODEC_ID_SP5X = Self.AV_CODEC_ID_LJPEG.inc() - comptime AV_CODEC_ID_JPEGLS = Self.AV_CODEC_ID_SP5X.inc() - comptime AV_CODEC_ID_MPEG4 = Self.AV_CODEC_ID_JPEGLS.inc() - comptime AV_CODEC_ID_RAWVIDEO = Self.AV_CODEC_ID_MPEG4.inc() - comptime AV_CODEC_ID_MSMPEG4V1 = Self.AV_CODEC_ID_RAWVIDEO.inc() - comptime AV_CODEC_ID_MSMPEG4V2 = Self.AV_CODEC_ID_MSMPEG4V1.inc() - comptime AV_CODEC_ID_MSMPEG4V3 = Self.AV_CODEC_ID_MSMPEG4V2.inc() - comptime AV_CODEC_ID_WMV1 = Self.AV_CODEC_ID_MSMPEG4V3.inc() - comptime AV_CODEC_ID_WMV2 = Self.AV_CODEC_ID_WMV1.inc() - comptime AV_CODEC_ID_H263P = Self.AV_CODEC_ID_WMV2.inc() - comptime AV_CODEC_ID_H263I = Self.AV_CODEC_ID_H263P.inc() - comptime AV_CODEC_ID_FLV1 = Self.AV_CODEC_ID_H263I.inc() - comptime AV_CODEC_ID_SVQ1 = Self.AV_CODEC_ID_FLV1.inc() - comptime AV_CODEC_ID_SVQ3 = Self.AV_CODEC_ID_SVQ1.inc() - comptime AV_CODEC_ID_DVVIDEO = Self.AV_CODEC_ID_SVQ3.inc() - comptime AV_CODEC_ID_HUFFYUV = Self.AV_CODEC_ID_DVVIDEO.inc() - comptime AV_CODEC_ID_CYUV = Self.AV_CODEC_ID_HUFFYUV.inc() - comptime AV_CODEC_ID_H264 = Self.AV_CODEC_ID_CYUV.inc() - comptime AV_CODEC_ID_INDEO3 = Self.AV_CODEC_ID_H264.inc() - comptime AV_CODEC_ID_VP3 = Self.AV_CODEC_ID_INDEO3.inc() - comptime AV_CODEC_ID_THEORA = Self.AV_CODEC_ID_VP3.inc() - comptime AV_CODEC_ID_ASV1 = Self.AV_CODEC_ID_THEORA.inc() - comptime AV_CODEC_ID_ASV2 = Self.AV_CODEC_ID_ASV1.inc() - comptime AV_CODEC_ID_FFV1 = Self.AV_CODEC_ID_ASV2.inc() - comptime AV_CODEC_ID_4XM = Self.AV_CODEC_ID_FFV1.inc() - comptime AV_CODEC_ID_VCR1 = Self.AV_CODEC_ID_4XM.inc() - comptime AV_CODEC_ID_CLJR = Self.AV_CODEC_ID_VCR1.inc() - comptime AV_CODEC_ID_MDEC = Self.AV_CODEC_ID_CLJR.inc() - comptime AV_CODEC_ID_ROQ = Self.AV_CODEC_ID_MDEC.inc() - comptime AV_CODEC_ID_INTERPLAY_VIDEO = Self.AV_CODEC_ID_ROQ.inc() - comptime AV_CODEC_ID_XAN_WC3 = Self.AV_CODEC_ID_INTERPLAY_VIDEO.inc() - comptime AV_CODEC_ID_XAN_WC4 = Self.AV_CODEC_ID_XAN_WC3.inc() - comptime AV_CODEC_ID_RPZA = Self.AV_CODEC_ID_XAN_WC4.inc() - comptime AV_CODEC_ID_CINEPAK = Self.AV_CODEC_ID_RPZA.inc() - comptime AV_CODEC_ID_WS_VQA = Self.AV_CODEC_ID_CINEPAK.inc() - comptime AV_CODEC_ID_MSRLE = Self.AV_CODEC_ID_WS_VQA.inc() - comptime AV_CODEC_ID_MSVIDEO1 = Self.AV_CODEC_ID_MSRLE.inc() - comptime AV_CODEC_ID_IDCIN = Self.AV_CODEC_ID_MSVIDEO1.inc() - comptime AV_CODEC_ID_8BPS = Self.AV_CODEC_ID_IDCIN.inc() - comptime AV_CODEC_ID_SMC = Self.AV_CODEC_ID_8BPS.inc() - comptime AV_CODEC_ID_FLIC = Self.AV_CODEC_ID_SMC.inc() - comptime AV_CODEC_ID_TRUEMOTION1 = Self.AV_CODEC_ID_FLIC.inc() - comptime AV_CODEC_ID_VMDVIDEO = Self.AV_CODEC_ID_TRUEMOTION1.inc() - comptime AV_CODEC_ID_MSZH = Self.AV_CODEC_ID_VMDVIDEO.inc() - comptime AV_CODEC_ID_ZLIB = Self.AV_CODEC_ID_MSZH.inc() - comptime AV_CODEC_ID_QTRLE = Self.AV_CODEC_ID_ZLIB.inc() - comptime AV_CODEC_ID_TSCC = Self.AV_CODEC_ID_QTRLE.inc() - comptime AV_CODEC_ID_ULTI = Self.AV_CODEC_ID_TSCC.inc() - comptime AV_CODEC_ID_QDRAW = Self.AV_CODEC_ID_ULTI.inc() - comptime AV_CODEC_ID_VIXL = Self.AV_CODEC_ID_QDRAW.inc() - comptime AV_CODEC_ID_QPEG = Self.AV_CODEC_ID_VIXL.inc() - comptime AV_CODEC_ID_PNG = Self.AV_CODEC_ID_QPEG.inc() - comptime AV_CODEC_ID_PPM = Self.AV_CODEC_ID_PNG.inc() - comptime AV_CODEC_ID_PBM = Self.AV_CODEC_ID_PPM.inc() - comptime AV_CODEC_ID_PGM = Self.AV_CODEC_ID_PBM.inc() - comptime AV_CODEC_ID_PGMYUV = Self.AV_CODEC_ID_PGM.inc() - comptime AV_CODEC_ID_PAM = Self.AV_CODEC_ID_PGMYUV.inc() - comptime AV_CODEC_ID_FFVHUFF = Self.AV_CODEC_ID_PAM.inc() - comptime AV_CODEC_ID_RV30 = Self.AV_CODEC_ID_FFVHUFF.inc() - comptime AV_CODEC_ID_RV40 = Self.AV_CODEC_ID_RV30.inc() - comptime AV_CODEC_ID_VC1 = Self.AV_CODEC_ID_RV40.inc() - comptime AV_CODEC_ID_WMV3 = Self.AV_CODEC_ID_VC1.inc() - comptime AV_CODEC_ID_LOCO = Self.AV_CODEC_ID_WMV3.inc() - comptime AV_CODEC_ID_WNV1 = Self.AV_CODEC_ID_LOCO.inc() - comptime AV_CODEC_ID_AASC = Self.AV_CODEC_ID_WNV1.inc() - comptime AV_CODEC_ID_INDEO2 = Self.AV_CODEC_ID_AASC.inc() - comptime AV_CODEC_ID_FRAPS = Self.AV_CODEC_ID_INDEO2.inc() - comptime AV_CODEC_ID_TRUEMOTION2 = Self.AV_CODEC_ID_FRAPS.inc() - comptime AV_CODEC_ID_BMP = Self.AV_CODEC_ID_TRUEMOTION2.inc() - comptime AV_CODEC_ID_CSCD = Self.AV_CODEC_ID_BMP.inc() - comptime AV_CODEC_ID_MMVIDEO = Self.AV_CODEC_ID_CSCD.inc() - comptime AV_CODEC_ID_ZMBV = Self.AV_CODEC_ID_MMVIDEO.inc() - comptime AV_CODEC_ID_AVS = Self.AV_CODEC_ID_ZMBV.inc() - comptime AV_CODEC_ID_SMACKVIDEO = Self.AV_CODEC_ID_AVS.inc() - comptime AV_CODEC_ID_NUV = Self.AV_CODEC_ID_SMACKVIDEO.inc() - comptime AV_CODEC_ID_KMVC = Self.AV_CODEC_ID_NUV.inc() - comptime AV_CODEC_ID_FLASHSV = Self.AV_CODEC_ID_KMVC.inc() - comptime AV_CODEC_ID_CAVS = Self.AV_CODEC_ID_FLASHSV.inc() - comptime AV_CODEC_ID_JPEG2000 = Self.AV_CODEC_ID_CAVS.inc() - comptime AV_CODEC_ID_VMNC = Self.AV_CODEC_ID_JPEG2000.inc() - comptime AV_CODEC_ID_VP5 = Self.AV_CODEC_ID_VMNC.inc() - comptime AV_CODEC_ID_VP6 = Self.AV_CODEC_ID_VP5.inc() - comptime AV_CODEC_ID_VP6F = Self.AV_CODEC_ID_VP6.inc() - comptime AV_CODEC_ID_TARGA = Self.AV_CODEC_ID_VP6F.inc() - comptime AV_CODEC_ID_DSICINVIDEO = Self.AV_CODEC_ID_TARGA.inc() - comptime AV_CODEC_ID_TIERTEXSEQVIDEO = Self.AV_CODEC_ID_DSICINVIDEO.inc() - comptime AV_CODEC_ID_TIFF = Self.AV_CODEC_ID_TIERTEXSEQVIDEO.inc() - comptime AV_CODEC_ID_GIF = Self.AV_CODEC_ID_TIFF.inc() - comptime AV_CODEC_ID_DXA = Self.AV_CODEC_ID_GIF.inc() - comptime AV_CODEC_ID_DNXHD = Self.AV_CODEC_ID_DXA.inc() - comptime AV_CODEC_ID_THP = Self.AV_CODEC_ID_DNXHD.inc() - comptime AV_CODEC_ID_SGI = Self.AV_CODEC_ID_THP.inc() - comptime AV_CODEC_ID_C93 = Self.AV_CODEC_ID_SGI.inc() - comptime AV_CODEC_ID_BETHSOFTVID = Self.AV_CODEC_ID_C93.inc() - comptime AV_CODEC_ID_PTX = Self.AV_CODEC_ID_BETHSOFTVID.inc() - comptime AV_CODEC_ID_TXD = Self.AV_CODEC_ID_PTX.inc() - comptime AV_CODEC_ID_VP6A = Self.AV_CODEC_ID_TXD.inc() - comptime AV_CODEC_ID_AMV = Self.AV_CODEC_ID_VP6A.inc() - comptime AV_CODEC_ID_VB = Self.AV_CODEC_ID_AMV.inc() - comptime AV_CODEC_ID_PCX = Self.AV_CODEC_ID_VB.inc() - comptime AV_CODEC_ID_SUNRAST = Self.AV_CODEC_ID_PCX.inc() - comptime AV_CODEC_ID_INDEO4 = Self.AV_CODEC_ID_SUNRAST.inc() - comptime AV_CODEC_ID_INDEO5 = Self.AV_CODEC_ID_INDEO4.inc() - comptime AV_CODEC_ID_MIMIC = Self.AV_CODEC_ID_INDEO5.inc() - comptime AV_CODEC_ID_RL2 = Self.AV_CODEC_ID_MIMIC.inc() - comptime AV_CODEC_ID_ESCAPE124 = Self.AV_CODEC_ID_RL2.inc() - comptime AV_CODEC_ID_DIRAC = Self.AV_CODEC_ID_ESCAPE124.inc() - comptime AV_CODEC_ID_BFI = Self.AV_CODEC_ID_DIRAC.inc() - comptime AV_CODEC_ID_CMV = Self.AV_CODEC_ID_BFI.inc() - comptime AV_CODEC_ID_MOTIONPIXELS = Self.AV_CODEC_ID_CMV.inc() - comptime AV_CODEC_ID_TGV = Self.AV_CODEC_ID_MOTIONPIXELS.inc() - comptime AV_CODEC_ID_TGQ = Self.AV_CODEC_ID_TGV.inc() - comptime AV_CODEC_ID_TQI = Self.AV_CODEC_ID_TGQ.inc() - comptime AV_CODEC_ID_AURA = Self.AV_CODEC_ID_TQI.inc() - comptime AV_CODEC_ID_AURA2 = Self.AV_CODEC_ID_AURA.inc() - comptime AV_CODEC_ID_V210X = Self.AV_CODEC_ID_AURA2.inc() - comptime AV_CODEC_ID_TMV = Self.AV_CODEC_ID_V210X.inc() - comptime AV_CODEC_ID_V210 = Self.AV_CODEC_ID_TMV.inc() - comptime AV_CODEC_ID_DPX = Self.AV_CODEC_ID_V210.inc() - comptime AV_CODEC_ID_MAD = Self.AV_CODEC_ID_DPX.inc() - comptime AV_CODEC_ID_FRWU = Self.AV_CODEC_ID_MAD.inc() - comptime AV_CODEC_ID_FLASHSV2 = Self.AV_CODEC_ID_FRWU.inc() - comptime AV_CODEC_ID_CDGRAPHICS = Self.AV_CODEC_ID_FLASHSV2.inc() - comptime AV_CODEC_ID_R210 = Self.AV_CODEC_ID_CDGRAPHICS.inc() - comptime AV_CODEC_ID_ANM = Self.AV_CODEC_ID_R210.inc() - comptime AV_CODEC_ID_BINKVIDEO = Self.AV_CODEC_ID_ANM.inc() - comptime AV_CODEC_ID_IFF_ILBM = Self.AV_CODEC_ID_BINKVIDEO.inc() - # Was a macro: - # define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - comptime AV_CODEC_ID_IFF_BYTERUN1 = Self(Self.AV_CODEC_ID_IFF_ILBM._value) - - comptime AV_CODEC_ID_KGV1 = Self.AV_CODEC_ID_IFF_BYTERUN1.inc() - comptime AV_CODEC_ID_YOP = Self.AV_CODEC_ID_KGV1.inc() - comptime AV_CODEC_ID_VP8 = Self.AV_CODEC_ID_YOP.inc() - comptime AV_CODEC_ID_PICTOR = Self.AV_CODEC_ID_VP8.inc() - comptime AV_CODEC_ID_ANSI = Self.AV_CODEC_ID_PICTOR.inc() - comptime AV_CODEC_ID_A64_MULTI = Self.AV_CODEC_ID_ANSI.inc() - comptime AV_CODEC_ID_A64_MULTI5 = Self.AV_CODEC_ID_A64_MULTI.inc() - comptime AV_CODEC_ID_R10K = Self.AV_CODEC_ID_A64_MULTI5.inc() - comptime AV_CODEC_ID_MXPEG = Self.AV_CODEC_ID_R10K.inc() - comptime AV_CODEC_ID_LAGARITH = Self.AV_CODEC_ID_MXPEG.inc() - comptime AV_CODEC_ID_PRORES = Self.AV_CODEC_ID_LAGARITH.inc() - comptime AV_CODEC_ID_JV = Self.AV_CODEC_ID_PRORES.inc() - comptime AV_CODEC_ID_DFA = Self.AV_CODEC_ID_JV.inc() - comptime AV_CODEC_ID_WMV3IMAGE = Self.AV_CODEC_ID_DFA.inc() - comptime AV_CODEC_ID_VC1IMAGE = Self.AV_CODEC_ID_WMV3IMAGE.inc() - comptime AV_CODEC_ID_UTVIDEO = Self.AV_CODEC_ID_VC1IMAGE.inc() - comptime AV_CODEC_ID_BMV_VIDEO = Self.AV_CODEC_ID_UTVIDEO.inc() - comptime AV_CODEC_ID_VBLE = Self.AV_CODEC_ID_BMV_VIDEO.inc() - comptime AV_CODEC_ID_DXTORY = Self.AV_CODEC_ID_VBLE.inc() - - # Handles macro inclusion of FF_API_V408_CODECID - # if FF_API_V408_CODECID - comptime AV_CODEC_ID_V410 = Self.xor( - Self.AV_CODEC_ID_DXTORY._value + 1, 0, FF_API_V408_CODECID - ) - - comptime AV_CODEC_ID_XWD = Self.xor( - Self.AV_CODEC_ID_V410._value + 1, - 0, - FF_API_V408_CODECID, - ) - comptime AV_CODEC_ID_CDXL = Self.AV_CODEC_ID_XWD.inc() - comptime AV_CODEC_ID_XBM = Self.AV_CODEC_ID_CDXL.inc() - comptime AV_CODEC_ID_ZEROCODEC = Self.AV_CODEC_ID_XBM.inc() - comptime AV_CODEC_ID_MSS1 = Self.AV_CODEC_ID_ZEROCODEC.inc() - comptime AV_CODEC_ID_MSA1 = Self.AV_CODEC_ID_MSS1.inc() - comptime AV_CODEC_ID_TSCC2 = Self.AV_CODEC_ID_MSA1.inc() - comptime AV_CODEC_ID_MTS2 = Self.AV_CODEC_ID_TSCC2.inc() - comptime AV_CODEC_ID_CLLC = Self.AV_CODEC_ID_MTS2.inc() - comptime AV_CODEC_ID_MSS2 = Self.AV_CODEC_ID_CLLC.inc() - comptime AV_CODEC_ID_VP9 = Self.AV_CODEC_ID_MSS2.inc() - comptime AV_CODEC_ID_AIC = Self.AV_CODEC_ID_VP9.inc() - comptime AV_CODEC_ID_ESCAPE130 = Self.AV_CODEC_ID_AIC.inc() - comptime AV_CODEC_ID_G2M = Self.AV_CODEC_ID_ESCAPE130.inc() - comptime AV_CODEC_ID_WEBP = Self.AV_CODEC_ID_G2M.inc() - comptime AV_CODEC_ID_HNM4_VIDEO = Self.AV_CODEC_ID_WEBP.inc() - comptime AV_CODEC_ID_HEVC = Self.AV_CODEC_ID_HNM4_VIDEO.inc() - # Was a macro: - # define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - comptime AV_CODEC_ID_H265 = Self(Self.AV_CODEC_ID_HEVC._value) - - comptime AV_CODEC_ID_FIC = Self.AV_CODEC_ID_H265.inc() - comptime AV_CODEC_ID_ALIAS_PIX = Self.AV_CODEC_ID_FIC.inc() - comptime AV_CODEC_ID_BRENDER_PIX = Self.AV_CODEC_ID_ALIAS_PIX.inc() - comptime AV_CODEC_ID_PAF_VIDEO = Self.AV_CODEC_ID_BRENDER_PIX.inc() - comptime AV_CODEC_ID_EXR = Self.AV_CODEC_ID_PAF_VIDEO.inc() - comptime AV_CODEC_ID_VP7 = Self.AV_CODEC_ID_EXR.inc() - comptime AV_CODEC_ID_SANM = Self.AV_CODEC_ID_VP7.inc() - comptime AV_CODEC_ID_SGIRLE = Self.AV_CODEC_ID_SANM.inc() - comptime AV_CODEC_ID_MVC1 = Self.AV_CODEC_ID_SGIRLE.inc() - comptime AV_CODEC_ID_MVC2 = Self.AV_CODEC_ID_MVC1.inc() - comptime AV_CODEC_ID_HQX = Self.AV_CODEC_ID_MVC2.inc() - comptime AV_CODEC_ID_TDSC = Self.AV_CODEC_ID_HQX.inc() - comptime AV_CODEC_ID_HQ_HQA = Self.AV_CODEC_ID_TDSC.inc() - comptime AV_CODEC_ID_HAP = Self.AV_CODEC_ID_HQ_HQA.inc() - comptime AV_CODEC_ID_DDS = Self.AV_CODEC_ID_HAP.inc() - comptime AV_CODEC_ID_DXV = Self.AV_CODEC_ID_DDS.inc() - comptime AV_CODEC_ID_SCREENPRESSO = Self.AV_CODEC_ID_DXV.inc() - comptime AV_CODEC_ID_RSCC = Self.AV_CODEC_ID_SCREENPRESSO.inc() - comptime AV_CODEC_ID_AVS2 = Self.AV_CODEC_ID_RSCC.inc() - comptime AV_CODEC_ID_PGX = Self.AV_CODEC_ID_AVS2.inc() - comptime AV_CODEC_ID_AVS3 = Self.AV_CODEC_ID_PGX.inc() - comptime AV_CODEC_ID_MSP2 = Self.AV_CODEC_ID_AVS3.inc() - comptime AV_CODEC_ID_VVC = Self.AV_CODEC_ID_MSP2.inc() - - # Was macro - # define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - comptime AV_CODEC_ID_H266 = Self(Self.AV_CODEC_ID_VVC._value) - - comptime AV_CODEC_ID_Y41P = Self.AV_CODEC_ID_H266.inc() - comptime AV_CODEC_ID_AVRP = Self.AV_CODEC_ID_Y41P.inc() - comptime AV_CODEC_ID_012V = Self.AV_CODEC_ID_AVRP.inc() - comptime AV_CODEC_ID_AVUI = Self.AV_CODEC_ID_012V.inc() - comptime AV_CODEC_ID_TARGA_Y216 = Self.AV_CODEC_ID_AVUI.inc() - - # Was macro for these 2 fields being toggled on and off. - # if FF_API_V408_CODECID - comptime AV_CODEC_ID_V308 = Self.xor( - Self.AV_CODEC_ID_TARGA_Y216._value + 1, 0, FF_API_V408_CODECID - ) - comptime AV_CODEC_ID_V408 = Self.xor( - Self.AV_CODEC_ID_V308._value + 1, 0, FF_API_V408_CODECID - ) - - comptime AV_CODEC_ID_YUV4 = Self.xor( - Self.AV_CODEC_ID_V408._value + 1, - Self.AV_CODEC_ID_TARGA_Y216._value + 1, - FF_API_V408_CODECID, - ) - comptime AV_CODEC_ID_AVRN = Self.AV_CODEC_ID_YUV4.inc() - comptime AV_CODEC_ID_CPIA = Self.AV_CODEC_ID_AVRN.inc() - comptime AV_CODEC_ID_XFACE = Self.AV_CODEC_ID_CPIA.inc() - comptime AV_CODEC_ID_SNOW = Self.AV_CODEC_ID_XFACE.inc() - comptime AV_CODEC_ID_SMVJPEG = Self.AV_CODEC_ID_SNOW.inc() - comptime AV_CODEC_ID_APNG = Self.AV_CODEC_ID_SMVJPEG.inc() - comptime AV_CODEC_ID_DAALA = Self.AV_CODEC_ID_APNG.inc() - comptime AV_CODEC_ID_CFHD = Self.AV_CODEC_ID_DAALA.inc() - comptime AV_CODEC_ID_TRUEMOTION2RT = Self.AV_CODEC_ID_CFHD.inc() - comptime AV_CODEC_ID_M101 = Self.AV_CODEC_ID_TRUEMOTION2RT.inc() - comptime AV_CODEC_ID_MAGICYUV = Self.AV_CODEC_ID_M101.inc() - comptime AV_CODEC_ID_SHEERVIDEO = Self.AV_CODEC_ID_MAGICYUV.inc() - comptime AV_CODEC_ID_YLC = Self.AV_CODEC_ID_SHEERVIDEO.inc() - comptime AV_CODEC_ID_PSD = Self.AV_CODEC_ID_YLC.inc() - comptime AV_CODEC_ID_PIXLET = Self.AV_CODEC_ID_PSD.inc() - comptime AV_CODEC_ID_SPEEDHQ = Self.AV_CODEC_ID_PIXLET.inc() - comptime AV_CODEC_ID_FMVC = Self.AV_CODEC_ID_SPEEDHQ.inc() - comptime AV_CODEC_ID_SCPR = Self.AV_CODEC_ID_FMVC.inc() - comptime AV_CODEC_ID_CLEARVIDEO = Self.AV_CODEC_ID_SCPR.inc() - comptime AV_CODEC_ID_XPM = Self.AV_CODEC_ID_CLEARVIDEO.inc() - comptime AV_CODEC_ID_AV1 = Self.AV_CODEC_ID_XPM.inc() - comptime AV_CODEC_ID_BITPACKED = Self.AV_CODEC_ID_AV1.inc() - comptime AV_CODEC_ID_MSCC = Self.AV_CODEC_ID_BITPACKED.inc() - comptime AV_CODEC_ID_SRGC = Self.AV_CODEC_ID_MSCC.inc() - comptime AV_CODEC_ID_SVG = Self.AV_CODEC_ID_SRGC.inc() - comptime AV_CODEC_ID_GDV = Self.AV_CODEC_ID_SVG.inc() - comptime AV_CODEC_ID_FITS = Self.AV_CODEC_ID_GDV.inc() - comptime AV_CODEC_ID_IMM4 = Self.AV_CODEC_ID_FITS.inc() - comptime AV_CODEC_ID_PROSUMER = Self.AV_CODEC_ID_IMM4.inc() - comptime AV_CODEC_ID_MWSC = Self.AV_CODEC_ID_PROSUMER.inc() - comptime AV_CODEC_ID_WCMV = Self.AV_CODEC_ID_MWSC.inc() - comptime AV_CODEC_ID_RASC = Self.AV_CODEC_ID_WCMV.inc() - comptime AV_CODEC_ID_HYMT = Self.AV_CODEC_ID_RASC.inc() - comptime AV_CODEC_ID_ARBC = Self.AV_CODEC_ID_HYMT.inc() - comptime AV_CODEC_ID_AGM = Self.AV_CODEC_ID_ARBC.inc() - comptime AV_CODEC_ID_LSCR = Self.AV_CODEC_ID_AGM.inc() - comptime AV_CODEC_ID_VP4 = Self.AV_CODEC_ID_LSCR.inc() - comptime AV_CODEC_ID_IMM5 = Self.AV_CODEC_ID_VP4.inc() - comptime AV_CODEC_ID_MVDV = Self.AV_CODEC_ID_IMM5.inc() - comptime AV_CODEC_ID_MVHA = Self.AV_CODEC_ID_MVDV.inc() - comptime AV_CODEC_ID_CDTOONS = Self.AV_CODEC_ID_MVHA.inc() - comptime AV_CODEC_ID_MV30 = Self.AV_CODEC_ID_CDTOONS.inc() - comptime AV_CODEC_ID_NOTCHLC = Self.AV_CODEC_ID_MV30.inc() - comptime AV_CODEC_ID_PFM = Self.AV_CODEC_ID_NOTCHLC.inc() - comptime AV_CODEC_ID_MOBICLIP = Self.AV_CODEC_ID_PFM.inc() - comptime AV_CODEC_ID_PHOTOCD = Self.AV_CODEC_ID_MOBICLIP.inc() - comptime AV_CODEC_ID_IPU = Self.AV_CODEC_ID_PHOTOCD.inc() - comptime AV_CODEC_ID_ARGO = Self.AV_CODEC_ID_IPU.inc() - comptime AV_CODEC_ID_CRI = Self.AV_CODEC_ID_ARGO.inc() - comptime AV_CODEC_ID_SIMBIOSIS_IMX = Self.AV_CODEC_ID_CRI.inc() - comptime AV_CODEC_ID_SGA_VIDEO = Self.AV_CODEC_ID_SIMBIOSIS_IMX.inc() - comptime AV_CODEC_ID_GEM = Self.AV_CODEC_ID_SGA_VIDEO.inc() - comptime AV_CODEC_ID_VBN = Self.AV_CODEC_ID_GEM.inc() - comptime AV_CODEC_ID_JPEGXL = Self.AV_CODEC_ID_VBN.inc() - comptime AV_CODEC_ID_QOI = Self.AV_CODEC_ID_JPEGXL.inc() - comptime AV_CODEC_ID_PHM = Self.AV_CODEC_ID_QOI.inc() - comptime AV_CODEC_ID_RADIANCE_HDR = Self.AV_CODEC_ID_PHM.inc() - comptime AV_CODEC_ID_WBMP = Self.AV_CODEC_ID_RADIANCE_HDR.inc() - comptime AV_CODEC_ID_MEDIA100 = Self.AV_CODEC_ID_WBMP.inc() - comptime AV_CODEC_ID_VQC = Self.AV_CODEC_ID_MEDIA100.inc() - comptime AV_CODEC_ID_PDV = Self.AV_CODEC_ID_VQC.inc() - comptime AV_CODEC_ID_EVC = Self.AV_CODEC_ID_PDV.inc() - comptime AV_CODEC_ID_RTV1 = Self.AV_CODEC_ID_EVC.inc() - comptime AV_CODEC_ID_VMIX = Self.AV_CODEC_ID_RTV1.inc() - comptime AV_CODEC_ID_LEAD = Self.AV_CODEC_ID_VMIX.inc() - comptime AV_CODEC_ID_DNXUC = Self.AV_CODEC_ID_LEAD.inc() - comptime AV_CODEC_ID_RV60 = Self.AV_CODEC_ID_DNXUC.inc() - comptime AV_CODEC_ID_JPEGXL_ANIM = Self.AV_CODEC_ID_RV60.inc() - comptime AV_CODEC_ID_APV = Self.AV_CODEC_ID_JPEGXL_ANIM.inc() - comptime AV_CODEC_ID_PRORES_RAW = Self.AV_CODEC_ID_APV.inc() - - # various PCM "codecs" - # These start at 65536. - # < A dummy id pointing at the start of audio codecs - comptime AV_CODEC_ID_FIRST_AUDIO = Self(0x10000) - comptime AV_CODEC_ID_PCM_S16LE = Self(0x10000) - comptime AV_CODEC_ID_PCM_S16BE = Self.AV_CODEC_ID_PCM_S16LE.inc() - comptime AV_CODEC_ID_PCM_U16LE = Self.AV_CODEC_ID_PCM_S16BE.inc() - comptime AV_CODEC_ID_PCM_U16BE = Self.AV_CODEC_ID_PCM_U16LE.inc() - comptime AV_CODEC_ID_PCM_S8 = Self.AV_CODEC_ID_PCM_U16BE.inc() - comptime AV_CODEC_ID_PCM_U8 = Self.AV_CODEC_ID_PCM_S8.inc() - comptime AV_CODEC_ID_PCM_MULAW = Self.AV_CODEC_ID_PCM_U8.inc() - comptime AV_CODEC_ID_PCM_ALAW = Self.AV_CODEC_ID_PCM_MULAW.inc() - comptime AV_CODEC_ID_PCM_S32LE = Self.AV_CODEC_ID_PCM_ALAW.inc() - comptime AV_CODEC_ID_PCM_S32BE = Self.AV_CODEC_ID_PCM_S32LE.inc() - comptime AV_CODEC_ID_PCM_U32LE = Self.AV_CODEC_ID_PCM_S32BE.inc() - comptime AV_CODEC_ID_PCM_U32BE = Self.AV_CODEC_ID_PCM_U32LE.inc() - comptime AV_CODEC_ID_PCM_S24LE = Self.AV_CODEC_ID_PCM_U32BE.inc() - comptime AV_CODEC_ID_PCM_S24BE = Self.AV_CODEC_ID_PCM_S24LE.inc() - comptime AV_CODEC_ID_PCM_U24LE = Self.AV_CODEC_ID_PCM_S24BE.inc() - comptime AV_CODEC_ID_PCM_U24BE = Self.AV_CODEC_ID_PCM_U24LE.inc() - comptime AV_CODEC_ID_PCM_S24DAUD = Self.AV_CODEC_ID_PCM_U24BE.inc() - comptime AV_CODEC_ID_PCM_ZORK = Self.AV_CODEC_ID_PCM_S24DAUD.inc() - comptime AV_CODEC_ID_PCM_S16LE_PLANAR = Self.AV_CODEC_ID_PCM_ZORK.inc() - comptime AV_CODEC_ID_PCM_DVD = Self.AV_CODEC_ID_PCM_S16LE_PLANAR.inc() - comptime AV_CODEC_ID_PCM_F32BE = Self.AV_CODEC_ID_PCM_DVD.inc() - comptime AV_CODEC_ID_PCM_F32LE = Self.AV_CODEC_ID_PCM_F32BE.inc() - comptime AV_CODEC_ID_PCM_F64BE = Self.AV_CODEC_ID_PCM_F32LE.inc() - comptime AV_CODEC_ID_PCM_F64LE = Self.AV_CODEC_ID_PCM_F64BE.inc() - comptime AV_CODEC_ID_PCM_BLURAY = Self.AV_CODEC_ID_PCM_F64LE.inc() - comptime AV_CODEC_ID_PCM_LXF = Self.AV_CODEC_ID_PCM_BLURAY.inc() - comptime AV_CODEC_ID_S302M = Self.AV_CODEC_ID_PCM_LXF.inc() - comptime AV_CODEC_ID_PCM_S8_PLANAR = Self.AV_CODEC_ID_S302M.inc() - comptime AV_CODEC_ID_PCM_S24LE_PLANAR = Self.AV_CODEC_ID_PCM_S8_PLANAR.inc() - comptime AV_CODEC_ID_PCM_S32LE_PLANAR = Self.AV_CODEC_ID_PCM_S24LE_PLANAR.inc() - comptime AV_CODEC_ID_PCM_S16BE_PLANAR = Self.AV_CODEC_ID_PCM_S32LE_PLANAR.inc() - comptime AV_CODEC_ID_PCM_S64LE = Self.AV_CODEC_ID_PCM_S16BE_PLANAR.inc() - comptime AV_CODEC_ID_PCM_S64BE = Self.AV_CODEC_ID_PCM_S64LE.inc() - comptime AV_CODEC_ID_PCM_F16LE = Self.AV_CODEC_ID_PCM_S64BE.inc() - comptime AV_CODEC_ID_PCM_F24LE = Self.AV_CODEC_ID_PCM_F16LE.inc() - comptime AV_CODEC_ID_PCM_VIDC = Self.AV_CODEC_ID_PCM_F24LE.inc() - comptime AV_CODEC_ID_PCM_SGA = Self.AV_CODEC_ID_PCM_VIDC.inc() - - # various ADPCM codecs - # Starts at 69632 - comptime AV_CODEC_ID_ADPCM_IMA_QT = Self(0x11000) - comptime AV_CODEC_ID_ADPCM_IMA_WAV = Self.AV_CODEC_ID_ADPCM_IMA_QT.inc() - comptime AV_CODEC_ID_ADPCM_IMA_DK3 = Self.AV_CODEC_ID_ADPCM_IMA_WAV.inc() - comptime AV_CODEC_ID_ADPCM_IMA_DK4 = Self.AV_CODEC_ID_ADPCM_IMA_DK3.inc() - comptime AV_CODEC_ID_ADPCM_IMA_WS = Self.AV_CODEC_ID_ADPCM_IMA_DK4.inc() - comptime AV_CODEC_ID_ADPCM_IMA_SMJPEG = Self.AV_CODEC_ID_ADPCM_IMA_WS.inc() - comptime AV_CODEC_ID_ADPCM_MS = Self.AV_CODEC_ID_ADPCM_IMA_SMJPEG.inc() - comptime AV_CODEC_ID_ADPCM_4XM = Self.AV_CODEC_ID_ADPCM_MS.inc() - comptime AV_CODEC_ID_ADPCM_XA = Self.AV_CODEC_ID_ADPCM_4XM.inc() - comptime AV_CODEC_ID_ADPCM_ADX = Self.AV_CODEC_ID_ADPCM_XA.inc() - comptime AV_CODEC_ID_ADPCM_EA = Self.AV_CODEC_ID_ADPCM_ADX.inc() - comptime AV_CODEC_ID_ADPCM_G726 = Self.AV_CODEC_ID_ADPCM_EA.inc() - comptime AV_CODEC_ID_ADPCM_CT = Self.AV_CODEC_ID_ADPCM_G726.inc() - comptime AV_CODEC_ID_ADPCM_SWF = Self.AV_CODEC_ID_ADPCM_CT.inc() - comptime AV_CODEC_ID_ADPCM_YAMAHA = Self.AV_CODEC_ID_ADPCM_SWF.inc() - comptime AV_CODEC_ID_ADPCM_SBPRO_4 = Self.AV_CODEC_ID_ADPCM_YAMAHA.inc() - comptime AV_CODEC_ID_ADPCM_SBPRO_3 = Self.AV_CODEC_ID_ADPCM_SBPRO_4.inc() - comptime AV_CODEC_ID_ADPCM_SBPRO_2 = Self.AV_CODEC_ID_ADPCM_SBPRO_3.inc() - comptime AV_CODEC_ID_ADPCM_THP = Self.AV_CODEC_ID_ADPCM_SBPRO_2.inc() - comptime AV_CODEC_ID_ADPCM_IMA_AMV = Self.AV_CODEC_ID_ADPCM_THP.inc() - comptime AV_CODEC_ID_ADPCM_EA_R1 = Self.AV_CODEC_ID_ADPCM_IMA_AMV.inc() - comptime AV_CODEC_ID_ADPCM_EA_R3 = Self.AV_CODEC_ID_ADPCM_EA_R1.inc() - comptime AV_CODEC_ID_ADPCM_EA_R2 = Self.AV_CODEC_ID_ADPCM_EA_R3.inc() - comptime AV_CODEC_ID_ADPCM_IMA_EA_SEAD = Self.AV_CODEC_ID_ADPCM_EA_R2.inc() - comptime AV_CODEC_ID_ADPCM_IMA_EA_EACS = Self.AV_CODEC_ID_ADPCM_IMA_EA_SEAD.inc() - comptime AV_CODEC_ID_ADPCM_EA_XAS = Self.AV_CODEC_ID_ADPCM_IMA_EA_EACS.inc() - comptime AV_CODEC_ID_ADPCM_EA_MAXIS_XA = Self.AV_CODEC_ID_ADPCM_EA_XAS.inc() - comptime AV_CODEC_ID_ADPCM_IMA_ISS = Self.AV_CODEC_ID_ADPCM_EA_MAXIS_XA.inc() - comptime AV_CODEC_ID_ADPCM_G722 = Self.AV_CODEC_ID_ADPCM_IMA_ISS.inc() - comptime AV_CODEC_ID_ADPCM_IMA_APC = Self.AV_CODEC_ID_ADPCM_G722.inc() - comptime AV_CODEC_ID_ADPCM_VIMA = Self.AV_CODEC_ID_ADPCM_IMA_APC.inc() - comptime AV_CODEC_ID_ADPCM_AFC = Self.AV_CODEC_ID_ADPCM_VIMA.inc() - comptime AV_CODEC_ID_ADPCM_IMA_OKI = Self.AV_CODEC_ID_ADPCM_AFC.inc() - comptime AV_CODEC_ID_ADPCM_DTK = Self.AV_CODEC_ID_ADPCM_IMA_OKI.inc() - comptime AV_CODEC_ID_ADPCM_IMA_RAD = Self.AV_CODEC_ID_ADPCM_DTK.inc() - comptime AV_CODEC_ID_ADPCM_G726LE = Self.AV_CODEC_ID_ADPCM_IMA_RAD.inc() - comptime AV_CODEC_ID_ADPCM_THP_LE = Self.AV_CODEC_ID_ADPCM_G726LE.inc() - comptime AV_CODEC_ID_ADPCM_PSX = Self.AV_CODEC_ID_ADPCM_THP_LE.inc() - comptime AV_CODEC_ID_ADPCM_AICA = Self.AV_CODEC_ID_ADPCM_PSX.inc() - comptime AV_CODEC_ID_ADPCM_IMA_DAT4 = Self.AV_CODEC_ID_ADPCM_AICA.inc() - comptime AV_CODEC_ID_ADPCM_MTAF = Self.AV_CODEC_ID_ADPCM_IMA_DAT4.inc() - comptime AV_CODEC_ID_ADPCM_AGM = Self.AV_CODEC_ID_ADPCM_MTAF.inc() - comptime AV_CODEC_ID_ADPCM_ARGO = Self.AV_CODEC_ID_ADPCM_AGM.inc() - comptime AV_CODEC_ID_ADPCM_IMA_SSI = Self.AV_CODEC_ID_ADPCM_ARGO.inc() - comptime AV_CODEC_ID_ADPCM_ZORK = Self.AV_CODEC_ID_ADPCM_IMA_SSI.inc() - comptime AV_CODEC_ID_ADPCM_IMA_APM = Self.AV_CODEC_ID_ADPCM_ZORK.inc() - comptime AV_CODEC_ID_ADPCM_IMA_ALP = Self.AV_CODEC_ID_ADPCM_IMA_APM.inc() - comptime AV_CODEC_ID_ADPCM_IMA_MTF = Self.AV_CODEC_ID_ADPCM_IMA_ALP.inc() - comptime AV_CODEC_ID_ADPCM_IMA_CUNNING = Self.AV_CODEC_ID_ADPCM_IMA_MTF.inc() - comptime AV_CODEC_ID_ADPCM_IMA_MOFLEX = Self.AV_CODEC_ID_ADPCM_IMA_CUNNING.inc() - comptime AV_CODEC_ID_ADPCM_IMA_ACORN = Self.AV_CODEC_ID_ADPCM_IMA_MOFLEX.inc() - comptime AV_CODEC_ID_ADPCM_XMD = Self.AV_CODEC_ID_ADPCM_IMA_ACORN.inc() - comptime AV_CODEC_ID_ADPCM_IMA_XBOX = Self.AV_CODEC_ID_ADPCM_XMD.inc() - comptime AV_CODEC_ID_ADPCM_SANYO = Self.AV_CODEC_ID_ADPCM_IMA_XBOX.inc() - - # AMR - comptime AV_CODEC_ID_AMR_NB = Self(0x12000) - comptime AV_CODEC_ID_AMR_WB = Self.AV_CODEC_ID_AMR_NB.inc() - - # RealAudio codecs - comptime AV_CODEC_ID_RA_144 = Self(0x13000) - comptime AV_CODEC_ID_RA_288 = Self.AV_CODEC_ID_RA_144.inc() - - # various DPCM codecs - comptime AV_CODEC_ID_ROQ_DPCM = Self(0x14000) - comptime AV_CODEC_ID_INTERPLAY_DPCM = Self.AV_CODEC_ID_ROQ_DPCM.inc() - comptime AV_CODEC_ID_XAN_DPCM = Self.AV_CODEC_ID_INTERPLAY_DPCM.inc() - comptime AV_CODEC_ID_SOL_DPCM = Self.AV_CODEC_ID_XAN_DPCM.inc() - comptime AV_CODEC_ID_SDX2_DPCM = Self.AV_CODEC_ID_SOL_DPCM.inc() - comptime AV_CODEC_ID_GREMLIN_DPCM = Self.AV_CODEC_ID_SDX2_DPCM.inc() - comptime AV_CODEC_ID_DERF_DPCM = Self.AV_CODEC_ID_GREMLIN_DPCM.inc() - comptime AV_CODEC_ID_WADY_DPCM = Self.AV_CODEC_ID_DERF_DPCM.inc() - comptime AV_CODEC_ID_CBD2_DPCM = Self.AV_CODEC_ID_WADY_DPCM.inc() - - # audio codecs - comptime AV_CODEC_ID_MP2 = Self(0x15000) - - # < preferred ID for decoding MPEG audio layer 1, 2 or 3 - comptime AV_CODEC_ID_MP3 = Self.AV_CODEC_ID_MP2.inc() - comptime AV_CODEC_ID_AAC = Self.AV_CODEC_ID_MP3.inc() - comptime AV_CODEC_ID_AC3 = Self.AV_CODEC_ID_AAC.inc() - comptime AV_CODEC_ID_DTS = Self.AV_CODEC_ID_AC3.inc() - comptime AV_CODEC_ID_VORBIS = Self.AV_CODEC_ID_DTS.inc() - comptime AV_CODEC_ID_DVAUDIO = Self.AV_CODEC_ID_VORBIS.inc() - comptime AV_CODEC_ID_WMAV1 = Self.AV_CODEC_ID_DVAUDIO.inc() - comptime AV_CODEC_ID_WMAV2 = Self.AV_CODEC_ID_WMAV1.inc() - comptime AV_CODEC_ID_MACE3 = Self.AV_CODEC_ID_WMAV2.inc() - comptime AV_CODEC_ID_MACE6 = Self.AV_CODEC_ID_MACE3.inc() - comptime AV_CODEC_ID_VMDAUDIO = Self.AV_CODEC_ID_MACE6.inc() - comptime AV_CODEC_ID_FLAC = Self.AV_CODEC_ID_VMDAUDIO.inc() - comptime AV_CODEC_ID_MP3ADU = Self.AV_CODEC_ID_FLAC.inc() - comptime AV_CODEC_ID_MP3ON4 = Self.AV_CODEC_ID_MP3ADU.inc() - comptime AV_CODEC_ID_SHORTEN = Self.AV_CODEC_ID_MP3ON4.inc() - comptime AV_CODEC_ID_ALAC = Self.AV_CODEC_ID_SHORTEN.inc() - comptime AV_CODEC_ID_WESTWOOD_SND1 = Self.AV_CODEC_ID_ALAC.inc() - - # < as in Berlin toast format - comptime AV_CODEC_ID_GSM = Self.AV_CODEC_ID_WESTWOOD_SND1.inc() - comptime AV_CODEC_ID_QDM2 = Self.AV_CODEC_ID_GSM.inc() - comptime AV_CODEC_ID_COOK = Self.AV_CODEC_ID_QDM2.inc() - comptime AV_CODEC_ID_TRUESPEECH = Self.AV_CODEC_ID_COOK.inc() - comptime AV_CODEC_ID_TTA = Self.AV_CODEC_ID_TRUESPEECH.inc() - comptime AV_CODEC_ID_SMACKAUDIO = Self.AV_CODEC_ID_TTA.inc() - comptime AV_CODEC_ID_QCELP = Self.AV_CODEC_ID_SMACKAUDIO.inc() - comptime AV_CODEC_ID_WAVPACK = Self.AV_CODEC_ID_QCELP.inc() - comptime AV_CODEC_ID_DSICINAUDIO = Self.AV_CODEC_ID_WAVPACK.inc() - comptime AV_CODEC_ID_IMC = Self.AV_CODEC_ID_DSICINAUDIO.inc() - comptime AV_CODEC_ID_MUSEPACK7 = Self.AV_CODEC_ID_IMC.inc() - comptime AV_CODEC_ID_MLP = Self.AV_CODEC_ID_MUSEPACK7.inc() - comptime AV_CODEC_ID_GSM_MS = Self.AV_CODEC_ID_MLP.inc() # as found in WAV - comptime AV_CODEC_ID_ATRAC3 = Self.AV_CODEC_ID_GSM_MS.inc() - comptime AV_CODEC_ID_APE = Self.AV_CODEC_ID_ATRAC3.inc() - comptime AV_CODEC_ID_NELLYMOSER = Self.AV_CODEC_ID_APE.inc() - comptime AV_CODEC_ID_MUSEPACK8 = Self.AV_CODEC_ID_NELLYMOSER.inc() - comptime AV_CODEC_ID_SPEEX = Self.AV_CODEC_ID_MUSEPACK8.inc() - comptime AV_CODEC_ID_WMAVOICE = Self.AV_CODEC_ID_SPEEX.inc() - comptime AV_CODEC_ID_WMAPRO = Self.AV_CODEC_ID_WMAVOICE.inc() - comptime AV_CODEC_ID_WMALOSSLESS = Self.AV_CODEC_ID_WMAPRO.inc() - comptime AV_CODEC_ID_ATRAC3P = Self.AV_CODEC_ID_WMALOSSLESS.inc() - comptime AV_CODEC_ID_EAC3 = Self.AV_CODEC_ID_ATRAC3P.inc() - comptime AV_CODEC_ID_SIPR = Self.AV_CODEC_ID_EAC3.inc() - comptime AV_CODEC_ID_MP1 = Self.AV_CODEC_ID_SIPR.inc() - comptime AV_CODEC_ID_TWINVQ = Self.AV_CODEC_ID_MP1.inc() - comptime AV_CODEC_ID_TRUEHD = Self.AV_CODEC_ID_TWINVQ.inc() - comptime AV_CODEC_ID_MP4ALS = Self.AV_CODEC_ID_TRUEHD.inc() - comptime AV_CODEC_ID_ATRAC1 = Self.AV_CODEC_ID_MP4ALS.inc() - comptime AV_CODEC_ID_BINKAUDIO_RDFT = Self.AV_CODEC_ID_ATRAC1.inc() - comptime AV_CODEC_ID_BINKAUDIO_DCT = Self.AV_CODEC_ID_BINKAUDIO_RDFT.inc() - comptime AV_CODEC_ID_AAC_LATM = Self.AV_CODEC_ID_BINKAUDIO_DCT.inc() - comptime AV_CODEC_ID_QDMC = Self.AV_CODEC_ID_AAC_LATM.inc() - comptime AV_CODEC_ID_CELT = Self.AV_CODEC_ID_QDMC.inc() - comptime AV_CODEC_ID_G723_1 = Self.AV_CODEC_ID_CELT.inc() - comptime AV_CODEC_ID_G729 = Self.AV_CODEC_ID_G723_1.inc() - comptime AV_CODEC_ID_8SVX_EXP = Self.AV_CODEC_ID_G729.inc() - comptime AV_CODEC_ID_8SVX_FIB = Self.AV_CODEC_ID_8SVX_EXP.inc() - comptime AV_CODEC_ID_BMV_AUDIO = Self.AV_CODEC_ID_8SVX_FIB.inc() - comptime AV_CODEC_ID_RALF = Self.AV_CODEC_ID_BMV_AUDIO.inc() - comptime AV_CODEC_ID_IAC = Self.AV_CODEC_ID_RALF.inc() - comptime AV_CODEC_ID_ILBC = Self.AV_CODEC_ID_IAC.inc() - comptime AV_CODEC_ID_OPUS = Self.AV_CODEC_ID_ILBC.inc() - comptime AV_CODEC_ID_COMFORT_NOISE = Self.AV_CODEC_ID_OPUS.inc() - comptime AV_CODEC_ID_TAK = Self.AV_CODEC_ID_COMFORT_NOISE.inc() - comptime AV_CODEC_ID_METASOUND = Self.AV_CODEC_ID_TAK.inc() - comptime AV_CODEC_ID_PAF_AUDIO = Self.AV_CODEC_ID_METASOUND.inc() - comptime AV_CODEC_ID_ON2AVC = Self.AV_CODEC_ID_PAF_AUDIO.inc() - comptime AV_CODEC_ID_DSS_SP = Self.AV_CODEC_ID_ON2AVC.inc() - comptime AV_CODEC_ID_CODEC2 = Self.AV_CODEC_ID_DSS_SP.inc() - comptime AV_CODEC_ID_FFWAVESYNTH = Self.AV_CODEC_ID_CODEC2.inc() - comptime AV_CODEC_ID_SONIC = Self.AV_CODEC_ID_FFWAVESYNTH.inc() - comptime AV_CODEC_ID_SONIC_LS = Self.AV_CODEC_ID_SONIC.inc() - comptime AV_CODEC_ID_EVRC = Self.AV_CODEC_ID_SONIC_LS.inc() - comptime AV_CODEC_ID_SMV = Self.AV_CODEC_ID_EVRC.inc() - comptime AV_CODEC_ID_DSD_LSBF = Self.AV_CODEC_ID_SMV.inc() - comptime AV_CODEC_ID_DSD_MSBF = Self.AV_CODEC_ID_DSD_LSBF.inc() - comptime AV_CODEC_ID_DSD_LSBF_PLANAR = Self.AV_CODEC_ID_DSD_MSBF.inc() - comptime AV_CODEC_ID_DSD_MSBF_PLANAR = Self.AV_CODEC_ID_DSD_LSBF_PLANAR.inc() - comptime AV_CODEC_ID_4GV = Self.AV_CODEC_ID_DSD_MSBF_PLANAR.inc() - comptime AV_CODEC_ID_INTERPLAY_ACM = Self.AV_CODEC_ID_4GV.inc() - comptime AV_CODEC_ID_XMA1 = Self.AV_CODEC_ID_INTERPLAY_ACM.inc() - comptime AV_CODEC_ID_XMA2 = Self.AV_CODEC_ID_XMA1.inc() - comptime AV_CODEC_ID_DST = Self.AV_CODEC_ID_XMA2.inc() - comptime AV_CODEC_ID_ATRAC3AL = Self.AV_CODEC_ID_DST.inc() - comptime AV_CODEC_ID_ATRAC3PAL = Self.AV_CODEC_ID_ATRAC3AL.inc() - comptime AV_CODEC_ID_DOLBY_E = Self.AV_CODEC_ID_ATRAC3PAL.inc() - comptime AV_CODEC_ID_APTX = Self.AV_CODEC_ID_DOLBY_E.inc() - comptime AV_CODEC_ID_APTX_HD = Self.AV_CODEC_ID_APTX.inc() - comptime AV_CODEC_ID_SBC = Self.AV_CODEC_ID_APTX_HD.inc() - comptime AV_CODEC_ID_ATRAC9 = Self.AV_CODEC_ID_SBC.inc() - comptime AV_CODEC_ID_HCOM = Self.AV_CODEC_ID_ATRAC9.inc() - comptime AV_CODEC_ID_ACELP_KELVIN = Self.AV_CODEC_ID_HCOM.inc() - comptime AV_CODEC_ID_MPEGH_3D_AUDIO = Self.AV_CODEC_ID_ACELP_KELVIN.inc() - comptime AV_CODEC_ID_SIREN = Self.AV_CODEC_ID_MPEGH_3D_AUDIO.inc() - comptime AV_CODEC_ID_HCA = Self.AV_CODEC_ID_SIREN.inc() - comptime AV_CODEC_ID_FASTAUDIO = Self.AV_CODEC_ID_HCA.inc() - comptime AV_CODEC_ID_MSNSIREN = Self.AV_CODEC_ID_FASTAUDIO.inc() - comptime AV_CODEC_ID_DFPWM = Self.AV_CODEC_ID_MSNSIREN.inc() - comptime AV_CODEC_ID_BONK = Self.AV_CODEC_ID_DFPWM.inc() - comptime AV_CODEC_ID_MISC4 = Self.AV_CODEC_ID_BONK.inc() - comptime AV_CODEC_ID_APAC = Self.AV_CODEC_ID_MISC4.inc() - comptime AV_CODEC_ID_FTR = Self.AV_CODEC_ID_APAC.inc() - comptime AV_CODEC_ID_WAVARC = Self.AV_CODEC_ID_FTR.inc() - comptime AV_CODEC_ID_RKA = Self.AV_CODEC_ID_WAVARC.inc() - comptime AV_CODEC_ID_AC4 = Self.AV_CODEC_ID_RKA.inc() - comptime AV_CODEC_ID_OSQ = Self.AV_CODEC_ID_AC4.inc() - comptime AV_CODEC_ID_QOA = Self.AV_CODEC_ID_OSQ.inc() - comptime AV_CODEC_ID_LC3 = Self.AV_CODEC_ID_QOA.inc() - comptime AV_CODEC_ID_G728 = Self.AV_CODEC_ID_LC3.inc() - - # subtitle codecs - comptime AV_CODEC_ID_FIRST_SUBTITLE = Self( - 0x17000 - ) # < A dummy ID pointing at the start of subtitle codecs. - comptime AV_CODEC_ID_DVD_SUBTITLE = Self(0x17000) - comptime AV_CODEC_ID_DVB_SUBTITLE = Self.AV_CODEC_ID_DVD_SUBTITLE.inc() - comptime AV_CODEC_ID_TEXT = Self.AV_CODEC_ID_DVB_SUBTITLE.inc() # < raw UTF-8 text - comptime AV_CODEC_ID_XSUB = Self.AV_CODEC_ID_TEXT.inc() - comptime AV_CODEC_ID_SSA = Self.AV_CODEC_ID_XSUB.inc() - comptime AV_CODEC_ID_MOV_TEXT = Self.AV_CODEC_ID_SSA.inc() - comptime AV_CODEC_ID_HDMV_PGS_SUBTITLE = Self.AV_CODEC_ID_MOV_TEXT.inc() - comptime AV_CODEC_ID_DVB_TELETEXT = Self.AV_CODEC_ID_HDMV_PGS_SUBTITLE.inc() - comptime AV_CODEC_ID_SRT = Self.AV_CODEC_ID_DVB_TELETEXT.inc() - comptime AV_CODEC_ID_MICRODVD = Self.AV_CODEC_ID_SRT.inc() - comptime AV_CODEC_ID_EIA_608 = Self.AV_CODEC_ID_MICRODVD.inc() - comptime AV_CODEC_ID_JACOSUB = Self.AV_CODEC_ID_EIA_608.inc() - comptime AV_CODEC_ID_SAMI = Self.AV_CODEC_ID_JACOSUB.inc() - comptime AV_CODEC_ID_REALTEXT = Self.AV_CODEC_ID_SAMI.inc() - comptime AV_CODEC_ID_STL = Self.AV_CODEC_ID_REALTEXT.inc() - comptime AV_CODEC_ID_SUBVIEWER1 = Self.AV_CODEC_ID_STL.inc() - comptime AV_CODEC_ID_SUBVIEWER = Self.AV_CODEC_ID_SUBVIEWER1.inc() - comptime AV_CODEC_ID_SUBRIP = Self.AV_CODEC_ID_SUBVIEWER.inc() - comptime AV_CODEC_ID_WEBVTT = Self.AV_CODEC_ID_SUBRIP.inc() - comptime AV_CODEC_ID_MPL2 = Self.AV_CODEC_ID_WEBVTT.inc() - comptime AV_CODEC_ID_VPLAYER = Self.AV_CODEC_ID_MPL2.inc() - comptime AV_CODEC_ID_PJS = Self.AV_CODEC_ID_VPLAYER.inc() - comptime AV_CODEC_ID_ASS = Self.AV_CODEC_ID_PJS.inc() - comptime AV_CODEC_ID_HDMV_TEXT_SUBTITLE = Self.AV_CODEC_ID_ASS.inc() - comptime AV_CODEC_ID_TTML = Self.AV_CODEC_ID_HDMV_TEXT_SUBTITLE.inc() - comptime AV_CODEC_ID_ARIB_CAPTION = Self.AV_CODEC_ID_TTML.inc() - comptime AV_CODEC_ID_IVTV_VBI = Self.AV_CODEC_ID_ARIB_CAPTION.inc() - - # other specific kind of codecs (generally used for attachments) - # A dummy ID pointing at the start of various fake codecs. - comptime AV_CODEC_ID_FIRST_UNKNOWN = Self(0x18000) - comptime AV_CODEC_ID_TTF = Self(0x18000) - # < Contain timestamp estimated through PCR of program stream. - comptime AV_CODEC_ID_SCTE_35 = Self.AV_CODEC_ID_TTF.inc() - comptime AV_CODEC_ID_EPG = Self.AV_CODEC_ID_SCTE_35.inc() - comptime AV_CODEC_ID_BINTEXT = Self.AV_CODEC_ID_EPG.inc() - comptime AV_CODEC_ID_XBIN = Self.AV_CODEC_ID_BINTEXT.inc() - comptime AV_CODEC_ID_IDF = Self.AV_CODEC_ID_XBIN.inc() - comptime AV_CODEC_ID_OTF = Self.AV_CODEC_ID_IDF.inc() - comptime AV_CODEC_ID_SMPTE_KLV = Self.AV_CODEC_ID_OTF.inc() - comptime AV_CODEC_ID_DVD_NAV = Self.AV_CODEC_ID_SMPTE_KLV.inc() - comptime AV_CODEC_ID_TIMED_ID3 = Self.AV_CODEC_ID_DVD_NAV.inc() - comptime AV_CODEC_ID_BIN_DATA = Self.AV_CODEC_ID_TIMED_ID3.inc() - comptime AV_CODEC_ID_SMPTE_2038 = Self.AV_CODEC_ID_BIN_DATA.inc() - comptime AV_CODEC_ID_LCEVC = Self.AV_CODEC_ID_SMPTE_2038.inc() - comptime AV_CODEC_ID_SMPTE_436M_ANC = Self.AV_CODEC_ID_LCEVC.inc() - - # < codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - comptime AV_CODEC_ID_PROBE = Self(0x19000) - - # _FAKE_ codec to indicate a raw MPEG-2 TS - # stream (only used by libavformat) - comptime AV_CODEC_ID_MPEG2TS = Self(0x20000) - - # < _FAKE_ codec to indicate a MPEG-4 Systems stream (only used by libavformat) - comptime AV_CODEC_ID_MPEG4SYSTEMS = Self(0x20001) - - # < Dummy codec for streams containing only metadata information. - comptime AV_CODEC_ID_FFMETADATA = Self(0x21000) - - # < Passthrough codec, AVFrames wrapped in AVPacket - comptime AV_CODEC_ID_WRAPPED_AVFRAME = Self(0x21001) - - # Dummy null video codec, useful mainly for development and debugging. - # Null encoder/decoder discard all input and never return any output. - comptime AV_CODEC_ID_VNULL = Self.AV_CODEC_ID_WRAPPED_AVFRAME.inc() - - # Dummy null audio codec, useful mainly for development and debugging. - # Null encoder/decoder discard all input and never return any output. - comptime AV_CODEC_ID_ANULL = Self.AV_CODEC_ID_VNULL.inc() diff --git a/ash_dynamics/ffmpeg/avcodec/codec_par.mojo b/ash_dynamics/ffmpeg/avcodec/codec_par.mojo deleted file mode 100644 index d6f466d..0000000 --- a/ash_dynamics/ffmpeg/avcodec/codec_par.mojo +++ /dev/null @@ -1,57 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/codec__par_8h.html." - -from ash_dynamics.ffmpeg.avcodec.defs import AVFieldOrder -from ash_dynamics.ffmpeg.avutil.pixfmt import ( - AVColorRange, - AVColorPrimaries, - AVColorTransferCharacteristic, - AVColorSpace, - AVChromaLocation, -) -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType - -from std.ffi import c_uint, c_uchar, c_long_long, c_int -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout -from ash_dynamics.ffmpeg.avcodec.packet import AVPacketSideData - - -@fieldwise_init -struct AVCodecParameters(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVCodecParameters.html." - - var codec_type: AVMediaType.ENUM_DTYPE - var codec_id: AVCodecID.ENUM_DTYPE - var codec_tag: c_uint - var extradata: UnsafePointer[c_uchar, MutExternalOrigin] - var extradata_size: c_int - var coded_side_data: UnsafePointer[AVPacketSideData, MutExternalOrigin] - var nb_coded_side_data: c_int - var format: c_int - var bit_rate: c_long_long - var bits_per_coded_sample: c_int - var bits_per_raw_sample: c_int - - var profile: c_int - var level: c_int - - var width: c_int - var height: c_int - var sample_aspect_ratio: AVRational - var framerate: AVRational - var field_order: AVFieldOrder.ENUM_DTYPE - var color_range: AVColorRange.ENUM_DTYPE - var color_primaries: AVColorPrimaries.ENUM_DTYPE - var color_trc: AVColorTransferCharacteristic.ENUM_DTYPE - var colorspace: AVColorSpace.ENUM_DTYPE - var chroma_location: AVChromaLocation.ENUM_DTYPE - - var video_delay: c_int - var ch_layout: AVChannelLayout - var sample_rate: c_int - var block_align: c_int - var frame_size: c_int - var initial_padding: c_int - var trailing_padding: c_int - var seek_preroll: c_int diff --git a/ash_dynamics/ffmpeg/avcodec/defs.mojo b/ash_dynamics/ffmpeg/avcodec/defs.mojo deleted file mode 100644 index e0fb44a..0000000 --- a/ash_dynamics/ffmpeg/avcodec/defs.mojo +++ /dev/null @@ -1,49 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/defs_8h.html." -from std.ffi import c_int - - -comptime AV_INPUT_BUFFER_PADDING_SIZE = c_int(64) - - -@fieldwise_init("implicit") -struct AVFieldOrder(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_FIELD_UNKNOWN = Self(0) - comptime AV_FIELD_PROGRESSIVE = Self(1) - comptime AV_FIELD_TT = Self(2) - comptime AV_FIELD_BB = Self(3) - comptime AV_FIELD_TB = Self(4) - comptime AV_FIELD_BT = Self(5) - - -@fieldwise_init("implicit") -struct AVAudioServiceType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_AUDIO_SERVICE_TYPE_MAIN = Self(0) - comptime AV_AUDIO_SERVICE_TYPE_EFFECTS = Self(1) - comptime AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = Self(2) - comptime AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = Self(3) - comptime AV_AUDIO_SERVICE_TYPE_DIALOGUE = Self(4) - comptime AV_AUDIO_SERVICE_TYPE_COMMENTARY = Self(5) - comptime AV_AUDIO_SERVICE_TYPE_EMERGENCY = Self(6) - comptime AV_AUDIO_SERVICE_TYPE_VOICE_OVER = Self(7) - comptime AV_AUDIO_SERVICE_TYPE_KARAOKE = Self(8) - comptime AV_AUDIO_SERVICE_TYPE_NB = Self(9) - - -@fieldwise_init("implicit") -struct AVDiscard(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AVDISCARD_NONE = Self(-16) - comptime AVDISCARD_DEFAULT = Self(0) - comptime AVDISCARD_NONREF = Self(8) - comptime AVDISCARD_BIDIR = Self(16) - comptime AVDISCARD_NONINTRA = Self(24) - comptime AVDISCARD_NONKEY = Self(32) - comptime AVDISCARD_ALL = Self(48) diff --git a/ash_dynamics/ffmpeg/avcodec/get_buffer.mojo b/ash_dynamics/ffmpeg/avcodec/get_buffer.mojo deleted file mode 100644 index b5dfbd1..0000000 --- a/ash_dynamics/ffmpeg/avcodec/get_buffer.mojo +++ /dev/null @@ -1,2 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/get__buffer_8c.html." -comptime FramePool = OpaquePointer[MutExternalOrigin] diff --git a/ash_dynamics/ffmpeg/avcodec/packet.mojo b/ash_dynamics/ffmpeg/avcodec/packet.mojo deleted file mode 100644 index 1967054..0000000 --- a/ash_dynamics/ffmpeg/avcodec/packet.mojo +++ /dev/null @@ -1,433 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/packet_8h.html." -from std.ffi import ( - c_uchar, - c_uint, - c_int, - c_long_long, - c_size_t, - c_char, - external_call, -) -from std.os.atomic import Atomic -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.rational import AVRational - -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary - - -@fieldwise_init("implicit") -struct AVPacketSideDataType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_PKT_DATA_PALETTE = Self(0) - comptime AV_PKT_DATA_NEW_EXTRADATA = Self(1) - comptime AV_PKT_DATA_PARAM_CHANGE = Self(2) - comptime AV_PKT_DATA_H263_MB_INFO = Self(3) - comptime AV_PKT_DATA_REPLAYGAIN = Self(4) - comptime AV_PKT_DATA_DISPLAYMATRIX = Self(5) - comptime AV_PKT_DATA_STEREO3D = Self(6) - comptime AV_PKT_DATA_AUDIO_SERVICE_TYPE = Self(7) - comptime AV_PKT_DATA_QUALITY_STATS = Self(8) - comptime AV_PKT_DATA_FALLBACK_TRACK = Self(9) - comptime AV_PKT_DATA_CPB_PROPERTIES = Self(10) - comptime AV_PKT_DATA_SKIP_SAMPLES = Self(11) - comptime AV_PKT_DATA_JP_DUALMONO = Self(12) - comptime AV_PKT_DATA_STRINGS_METADATA = Self(13) - comptime AV_PKT_DATA_SUBTITLE_POSITION = Self(14) - comptime AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL = Self(15) - comptime AV_PKT_DATA_WEBVTT_IDENTIFIER = Self(16) - - comptime AV_PKT_DATA_WEBVTT_SETTINGS = Self(17) - - comptime AV_PKT_DATA_METADATA_UPDATE = Self(18) - - comptime AV_PKT_DATA_MPEGTS_STREAM_ID = Self(19) - - comptime AV_PKT_DATA_MASTERING_DISPLAY_METADATA = Self(20) - - comptime AV_PKT_DATA_SPHERICAL = Self(21) - - comptime AV_PKT_DATA_CONTENT_LIGHT_LEVEL = Self(22) - - comptime AV_PKT_DATA_A53_CC = Self(23) - - comptime AV_PKT_DATA_ENCRYPTION_INIT_INFO = Self(24) - - comptime AV_PKT_DATA_ENCRYPTION_INFO = Self(25) - - comptime AV_PKT_DATA_AFD = Self(26) - - comptime AV_PKT_DATA_PRFT = Self(27) - - comptime AV_PKT_DATA_ICC_PROFILE = Self(28) - - comptime AV_PKT_DATA_DOVI_CONF = Self(29) - - comptime AV_PKT_DATA_S12M_TIMECODE = Self(30) - - comptime AV_PKT_DATA_DYNAMIC_HDR10_PLUS = Self(31) - - comptime AV_PKT_DATA_IAMF_MIX_GAIN_PARAM = Self(32) - - comptime AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM = Self(33) - - comptime AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM = Self(34) - - comptime AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT = Self(35) - - comptime AV_PKT_DATA_FRAME_CROPPING = Self(36) - - comptime AV_PKT_DATA_LCEVC = Self(37) - - comptime AV_PKT_DATA_3D_REFERENCE_DISPLAYS = Self(38) - - comptime AV_PKT_DATA_RTCP_SR = Self(39) - - comptime AV_PKT_DATA_NB = Self(40) - - -@fieldwise_init -struct AVPacketSideData(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVPacketSideData.html." - - var data: UnsafePointer[c_uchar, MutAnyOrigin] - var size: c_size_t - var type: AVPacketSideDataType.ENUM_DTYPE - - -fn av_packet_side_data_new( - psd: UnsafePointer[ - UnsafePointer[AVPacketSideData, MutExternalOrigin], MutExternalOrigin - ], - pnb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - size: c_size_t, - flags: c_int, -) -> UnsafePointer[AVPacketSideData, MutExternalOrigin]: - return external_call[ - "av_packet_side_data_new", - UnsafePointer[AVPacketSideData, MutExternalOrigin], - ](psd, pnb_sd, type, size, flags) - - -fn av_packet_side_data_add( - psd: UnsafePointer[ - UnsafePointer[AVPacketSideData, MutExternalOrigin], MutExternalOrigin - ], - pnb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - data: OpaquePointer[MutExternalOrigin], - size: c_size_t, - flags: c_int, -) -> UnsafePointer[AVPacketSideData, MutExternalOrigin]: - return external_call[ - "av_packet_side_data_add", - UnsafePointer[AVPacketSideData, MutExternalOrigin], - ](psd, pnb_sd, type, data, size, flags) - - -fn av_packet_side_data_get( - sd: UnsafePointer[AVPacketSideData, ImmutExternalOrigin], - nb_sd: c_int, - type: AVPacketSideDataType.ENUM_DTYPE, -) -> UnsafePointer[AVPacketSideData, ImmutExternalOrigin]: - return external_call[ - "av_packet_side_data_get", - UnsafePointer[AVPacketSideData, ImmutExternalOrigin], - ](sd, nb_sd, type) - - -fn av_packet_side_data_remove( - psd: UnsafePointer[AVPacketSideData, MutExternalOrigin], - pnb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, -): - external_call["av_packet_side_data_remove", NoneType](psd, pnb_sd, type) - - -fn av_packet_side_data_free( - psd: UnsafePointer[ - UnsafePointer[AVPacketSideData, MutExternalOrigin], MutExternalOrigin - ], - pnb_sd: UnsafePointer[c_int, MutExternalOrigin], -): - external_call["av_packet_side_data_free", NoneType](psd, pnb_sd) - - -fn av_packet_side_data_name( - type: AVPacketSideDataType.ENUM_DTYPE, -) -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "av_packet_side_data_name", UnsafePointer[c_char, ImmutExternalOrigin] - ](type) - - -@fieldwise_init -struct AVPacket(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVPacket.html." - - var buf: UnsafePointer[AVBufferRef, origin=MutExternalOrigin] - var pts: c_long_long - var dts: c_long_long - var data: UnsafePointer[c_uchar, origin=MutExternalOrigin] - var size: c_int - var stream_index: c_int - - comptime AV_PKT_FLAG_KEY: c_int = 0x0001 - comptime AV_PKT_FLAG_CORRUPT: c_int = 0x0002 - comptime AV_PKT_FLAG_DISCARD: c_int = 0x0004 - comptime AV_PKT_FLAG_TRUSTED: c_int = 0x0008 - comptime AV_PKT_FLAG_DISPOSABLE: c_int = 0x0010 - - var flags: c_int - var side_data: UnsafePointer[AVPacketSideData, origin=MutExternalOrigin] - var side_data_elems: c_int - var duration: c_long_long - var pos: c_long_long - var opaque: OpaquePointer[MutExternalOrigin] - var opaque_ref: UnsafePointer[AVBufferRef, origin=MutExternalOrigin] - var time_base: AVRational - - -# NOTE: AVPacketList is an optional struct that is being deprecated. -# I don't think we need to implement this, but leaving this here as a reference. -# #if FF_API_INIT_PACKET -# attribute_deprecated -# typedef struct AVPacketList { -# AVPacket pkt; -# struct AVPacketList *next; -# } AVPacketList; -# #endif - - -comptime AV_PKT_FLAG_KEY = c_int(0x0001) -comptime AV_PKT_FLAG_CORRUPT = c_int(0x0002) -comptime AV_PKT_FLAG_DISCARD = c_int(0x0004) -comptime AV_PKT_FLAG_TRUSTED = c_int(0x0008) -comptime AV_PKT_FLAG_DISPOSABLE = c_int(0x0010) - - -@fieldwise_init -struct AVSideDataParamChangeFlags(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - comptime AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = Self(0x0004) - comptime AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = Self(0x0008) - - -fn av_packet_alloc() -> UnsafePointer[AVPacket, MutExternalOrigin]: - return external_call[ - "av_packet_alloc", UnsafePointer[AVPacket, MutExternalOrigin] - ]() - - -fn av_packet_clone( - src: UnsafePointer[AVPacket, ImmutExternalOrigin] -) -> UnsafePointer[AVPacket, MutExternalOrigin]: - return external_call[ - "av_packet_clone", UnsafePointer[AVPacket, MutExternalOrigin] - ](src) - - -fn av_packet_free( - pkt: UnsafePointer[ - UnsafePointer[AVPacket, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["av_packet_free", NoneType](pkt) - - -fn av_packet_free(pkt: UnsafePointer[AVPacket, MutExternalOrigin]): - var pkt_ptr = alloc[type_of(pkt)](1) - pkt_ptr[] = pkt - av_packet_free(pkt_ptr) - pkt_ptr.free() - - -# NOTE: av_init_packet is an optional function that is being deprecated. -# I don't think we need to implement this, but leaving this here as a reference. -# #if FF_API_INIT_PACKET -# /** -# * Initialize optional fields of a packet with default values. -# * -# * Note, this does not touch the data and size members, which have to be -# * initialized separately. -# * -# * @param pkt packet -# * -# * @see av_packet_alloc -# * @see av_packet_unref -# * -# * @deprecated This function is deprecated. Once it's removed, -# sizeof(AVPacket) will not be a part of the ABI anymore. -# */ -# attribute_deprecated -# void av_init_packet(AVPacket *pkt); -# #endif - - -fn av_new_packet( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], size: c_int -) -> c_int: - return external_call["av_new_packet", c_int](pkt, size) - - -fn av_shrink_packet( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], size: c_int -): - external_call["av_shrink_packet", NoneType](pkt, size) - - -fn av_grow_packet( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], grow_by: c_int -) -> c_int: - return external_call["av_grow_packet", c_int](pkt, grow_by) - - -fn av_packet_from_data( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - data: UnsafePointer[c_uchar, MutExternalOrigin], - size: c_int, -) -> c_int: - return external_call["av_packet_from_data", c_int](pkt, data, size) - - -fn av_packet_new_side_data( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - size: c_size_t, -) -> UnsafePointer[c_uchar, MutExternalOrigin]: - return external_call[ - "av_packet_new_side_data", UnsafePointer[c_uchar, MutExternalOrigin] - ](pkt, type, size) - - -fn av_packet_add_side_data( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - data: UnsafePointer[c_uchar, MutExternalOrigin], - size: c_size_t, -) -> c_int: - return external_call["av_packet_add_side_data", c_int]( - pkt, type, data, size - ) - - -fn av_packet_shrink_side_data( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - size: c_size_t, -) -> c_int: - return external_call["av_packet_shrink_side_data", c_int](pkt, type, size) - - -fn av_packet_get_side_data( - pkt: UnsafePointer[AVPacket, ImmutExternalOrigin], - type: AVPacketSideDataType.ENUM_DTYPE, - size: UnsafePointer[c_size_t, MutExternalOrigin], -) -> UnsafePointer[c_uchar, ImmutExternalOrigin]: - return external_call[ - "av_packet_get_side_data", UnsafePointer[c_uchar, ImmutExternalOrigin] - ](pkt, type, size) - - -fn av_packet_pack_dictionary( - dict: UnsafePointer[AVDictionary, ImmutExternalOrigin], - size: UnsafePointer[c_size_t, MutExternalOrigin], -) -> UnsafePointer[c_uchar, ImmutExternalOrigin]: - return external_call[ - "av_packet_pack_dictionary", UnsafePointer[c_uchar, ImmutExternalOrigin] - ](dict, size) - - -fn av_packet_unpack_dictionary( - data: UnsafePointer[c_uchar, ImmutExternalOrigin], - size: c_size_t, - dict: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["av_packet_unpack_dictionary", c_int](data, size, dict) - - -fn av_packet_free_side_data(pkt: UnsafePointer[AVPacket, MutExternalOrigin]): - external_call["av_packet_free_side_data", NoneType](pkt) - - -fn av_packet_ref( - dst: UnsafePointer[AVPacket, MutExternalOrigin], - src: UnsafePointer[AVPacket, ImmutExternalOrigin], -) -> c_int: - return external_call["av_packet_ref", c_int](dst, src) - - -fn av_packet_unref(pkt: UnsafePointer[AVPacket, MutExternalOrigin]): - external_call["av_packet_unref", NoneType](pkt) - - -fn av_packet_move_ref( - dst: UnsafePointer[AVPacket, MutExternalOrigin], - src: UnsafePointer[AVPacket, MutExternalOrigin], -): - external_call["av_packet_move_ref", NoneType](dst, src) - - -fn av_packet_copy_props( - dst: UnsafePointer[AVPacket, MutExternalOrigin], - src: UnsafePointer[AVPacket, ImmutExternalOrigin], -) -> c_int: - return external_call["av_packet_copy_props", c_int](dst, src) - - -fn av_packet_make_refcounted( - pkt: UnsafePointer[AVPacket, MutExternalOrigin] -) -> c_int: - return external_call["av_packet_make_refcounted", c_int](pkt) - - -fn av_packet_make_writable( - pkt: UnsafePointer[AVPacket, MutExternalOrigin] -) -> c_int: - return external_call["av_packet_make_writable", c_int](pkt) - - -fn av_packet_rescale_ts( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - tb_src: c_long_long, - tb_dst: c_long_long, -): - external_call["av_packet_rescale_ts", NoneType](pkt, tb_src, tb_dst) - - -fn av_packet_rescale_ts( - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - tb_src: AVRational, - tb_dst: AVRational, -): - external_call["av_packet_rescale_ts", NoneType]( - pkt, tb_src.as_long_long(), tb_dst.as_long_long() - ) - - -struct AVContainerFifo(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVContainerFifo.html." - - pass - - -fn av_container_fifo_alloc_avpacket( - flags: c_int, -) -> UnsafePointer[AVContainerFifo, MutExternalOrigin]: - return external_call[ - "av_container_fifo_alloc_avpacket", - UnsafePointer[AVContainerFifo, MutExternalOrigin], - ](flags) - - -fn av_container_fifo_free( - cf: UnsafePointer[ - UnsafePointer[AVContainerFifo, MutExternalOrigin], MutExternalOrigin - ], -): - external_call["av_container_fifo_free", NoneType](cf) diff --git a/ash_dynamics/ffmpeg/avcodec/version_major.mojo b/ash_dynamics/ffmpeg/avcodec/version_major.mojo deleted file mode 100644 index 8f053fb..0000000 --- a/ash_dynamics/ffmpeg/avcodec/version_major.mojo +++ /dev/null @@ -1,21 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/libavcodec_2version__major_8h.html." -# NOTE: For binding to FFmpeg, this is critical to match. -# TODO: Look for a mechanism that validates this -# matches the FFmpeg version we are dynamically linking to. -comptime LIBAVCODEC_VERSION_MAJOR = 62 - - -comptime FF_API_INIT_PACKET = (LIBAVCODEC_VERSION_MAJOR < 63) - -comptime FF_API_V408_CODECID = (LIBAVCODEC_VERSION_MAJOR < 63) -comptime FF_API_CODEC_PROPS = (LIBAVCODEC_VERSION_MAJOR < 63) -comptime FF_API_EXR_GAMMA = (LIBAVCODEC_VERSION_MAJOR < 63) - -comptime FF_API_NVDEC_OLD_PIX_FMTS = (LIBAVCODEC_VERSION_MAJOR < 63) - -# reminder to remove the OMX encoder on next major bump -comptime FF_CODEC_OMX = (LIBAVCODEC_VERSION_MAJOR < 63) -# reminder to remove Sonic Lossy/Lossless encoders on next major bump -comptime FF_CODEC_SONIC_ENC = (LIBAVCODEC_VERSION_MAJOR < 63) -# reminder to remove Sonic decoder on next-next major bump -comptime FF_CODEC_SONIC_DEC = (LIBAVCODEC_VERSION_MAJOR < 63) diff --git a/ash_dynamics/ffmpeg/avformat/__init__.mojo b/ash_dynamics/ffmpeg/avformat/__init__.mojo deleted file mode 100644 index 6482e8f..0000000 --- a/ash_dynamics/ffmpeg/avformat/__init__.mojo +++ /dev/null @@ -1,8 +0,0 @@ -"""https://www.ffmpeg.org/doxygen/8.0/avformat_8h_source.html - -Symbols present can be listed via: - -nm -D $ASH_DYNAMICS_SO_INSTALL_PREFIX/libavformat.so -""" -from .avio import * -from .avformat import * diff --git a/ash_dynamics/ffmpeg/avformat/avformat.mojo b/ash_dynamics/ffmpeg/avformat/avformat.mojo deleted file mode 100644 index f1dc1a3..0000000 --- a/ash_dynamics/ffmpeg/avformat/avformat.mojo +++ /dev/null @@ -1,1390 +0,0 @@ -"""https://www.ffmpeg.org/doxygen/8.0/avformat_8h.html - -Main libavformat public API header - -I/O and Muxing/Demuxing Library -""" -from std.ffi import ( - c_int, - c_char, - c_uchar, - c_long_long, - c_uint, - c_size_t, - external_call, -) -from std.sys._libc import dup, fclose, fdopen, fflush, FILE_ptr -from std.utils import StaticTuple -from ash_dynamics.primitives._clib import C_Union -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket, AVPacketSideData -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avcodec.defs import AVDiscard -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecParserContext - -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType - -from ash_dynamics.ffmpeg.avformat.internal import AVCodecTag -from ash_dynamics.ffmpeg.avformat.avio import AVIOContext, AVIOInterruptCB - -from ash_dynamics.ffmpeg.avutil.iamf import ( - AVIAMFMixPresentation, - AVIAMFSubmix, - AVIAMFSubmixElement, - AVIAMFSubmixLayout, - AVIAMFAudioElement, - AVIAMFLayer, - AVIAMFParamDefinition, - AVIAMFAudioElementType, - AVIAMFHeadphonesMode, - AVIAMFSubmixLayoutType, -) - - -fn av_get_packet( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - size: c_int, -) -> c_int: - return external_call["av_get_packet", c_int](s, pkt, size) - - -fn av_append_packet( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], - size: c_int, -) -> c_int: - return external_call["av_append_packet", c_int](s, pkt, size) - - -########################## input / output formats ############################## - -# TODO: Is this a forward declaration? -# struct AVCodecTag; - - -@fieldwise_init -struct AVProbeData(Movable, Writable): - """See https://www.ffmpeg.org/doxygen/8.0/structAVProbeData.html.""" - - var filename: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var buf: UnsafePointer[c_uchar, origin=MutExternalOrigin] - var buf_size: c_int - var mime_type: UnsafePointer[c_char, origin=ImmutExternalOrigin] - - comptime AVPROBE_SCORE_MAX = 100 - comptime AVPROBE_SCORE_RETRY = Self.AVPROBE_SCORE_MAX / 4 - comptime AVPROBE_SCORE_STREAM_RETRY = Self.AVPROBE_SCORE_MAX / 4 - 1 - - comptime AVPROBE_SCORE_EXTENSION = 50 - comptime AVPROBE_SCORE_MIME_BONUS = 30 - - comptime AVPROBE_PADDING_SIZE = 32 - - fn __init__( - out self, - var filename: String, - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - mime_type: Optional[String] = None, - ): - self.filename = ( - filename.as_c_string_slice() - .unsafe_ptr() - .unsafe_origin_cast[ImmutExternalOrigin]() - ) - self.buf = buf - self.buf_size = buf_size - if mime_type: - var mime_type_str = mime_type.value() - self.mime_type = ( - mime_type_str.as_c_string_slice() - .unsafe_ptr() - .unsafe_origin_cast[ImmutExternalOrigin]() - ) - else: - self.mime_type = UnsafePointer[c_char, ImmutExternalOrigin]() - - -comptime AVFMT_NOFILE = 0x0001 -comptime AVFMT_NEEDNUMBER = 0x0002 - -# The muxer/demuxer is experimental and should be used with caution. -# It will not be selected automatically, and must be specified explicitly. -comptime AVFMT_EXPERIMENTAL = 0x0004 -comptime AVFMT_SHOW_IDS = 0x0008 -comptime AVFMT_GLOBALHEADER = 0x0040 -comptime AVFMT_NOTIMESTAMPS = 0x0080 -comptime AVFMT_GENERIC_INDEX = 0x0100 -comptime AVFMT_TS_DISCONT = 0x0200 -comptime AVFMT_VARIABLE_FPS = 0x0400 -comptime AVFMT_NODIMENSIONS = 0x0800 -comptime AVFMT_NOSTREAMS = 0x1000 -comptime AVFMT_NOBINSEARCH = 0x2000 -comptime AVFMT_NOGENSEARCH = 0x4000 -comptime AVFMT_NO_BYTE_SEEK = 0x8000 -comptime AVFMT_TS_NONSTRICT = 0x20000 -comptime AVFMT_TS_NEGATIVE = 0x40000 -comptime AVFMT_SEEK_TO_PTS = 0x4000000 - - -@fieldwise_init -struct AVOutputFormat(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVOutputFormat.html." - var name: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var long_name: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var mime_type: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var extensions: UnsafePointer[c_char, origin=ImmutExternalOrigin] - - var audio_codec: AVCodecID.ENUM_DTYPE - var video_codec: AVCodecID.ENUM_DTYPE - var subtitle_codec: AVCodecID.ENUM_DTYPE - - var flags: c_int - - var codec_tag: UnsafePointer[ - UnsafePointer[AVCodecTag, ImmutExternalOrigin], ImmutExternalOrigin - ] - var priv_class: UnsafePointer[AVClass, ImmutExternalOrigin] - - -@fieldwise_init -struct AVInputFormat(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVInputFormat.html." - var name: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var long_name: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var flags: c_int - var extensions: UnsafePointer[c_char, origin=ImmutExternalOrigin] - var codec_tag: UnsafePointer[ - UnsafePointer[AVCodecTag, ImmutExternalOrigin], ImmutExternalOrigin - ] - var priv_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var mime_type: UnsafePointer[c_char, origin=ImmutExternalOrigin] - - -@fieldwise_init -struct AVStreamParseType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AVSTREAM_PARSE_NONE = Self(0) - comptime AVSTREAM_PARSE_FULL = Self(1) - comptime AVSTREAM_PARSE_HEADERS = Self(2) - comptime AVSTREAM_PARSE_TIMESTAMPS = Self(3) - comptime AVSTREAM_PARSE_FULL_ONCE = Self(4) - comptime AVSTREAM_PARSE_FULL_RAW = Self(5) - - -@fieldwise_init -struct AVIndexEntry(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIndexEntry.html." - var pos: c_long_long - var timestamp: c_long_long - - comptime AVINDEX_KEYFRAME = 0x0001 - comptime AVINDEX_DISCARD_FRAME = 0x0002 - - var flags_size: c_int - var min_distance: c_int - - -comptime AV_DISPOSITION_DEFAULT = 1 << 0 -comptime AV_DISPOSITION_DUB = 1 << 1 -comptime AV_DISPOSITION_ORIGINAL = 1 << 2 -comptime AV_DISPOSITION_COMMENT = 1 << 3 -comptime AV_DISPOSITION_LYRICS = 1 << 4 -comptime AV_DISPOSITION_KARAOKE = 1 << 5 -comptime AV_DISPOSITION_FORCED = 1 << 6 -comptime AV_DISPOSITION_HEARING_IMPAIRED = 1 << 7 -comptime AV_DISPOSITION_VISUAL_IMPAIRED = 1 << 8 -comptime AV_DISPOSITION_CLEAN_EFFECTS = 1 << 9 -comptime AV_DISPOSITION_ATTACHED_PIC = 1 << 10 -comptime AV_DISPOSITION_TIMED_THUMBNAILS = 1 << 11 -comptime AV_DISPOSITION_NON_DIEGETIC = 1 << 12 -comptime AV_DISPOSITION_CAPTIONS = 1 << 16 -comptime AV_DISPOSITION_DESCRIPTIONS = 1 << 17 -comptime AV_DISPOSITION_METADATA = 1 << 18 -comptime AV_DISPOSITION_DEPENDENT = 1 << 19 -comptime AV_DISPOSITION_STILL_IMAGE = 1 << 20 -comptime AV_DISPOSITION_MULTILAYER = 1 << 21 - - -fn av_disposition_from_string(mut disp: String) -> c_int: - var disp_ptr = disp.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_disposition_from_string", c_int](disp_ptr) - - -fn av_disposition_to_string( - disposition: c_int, -) -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "av_disposition_to_string", UnsafePointer[c_char, ImmutExternalOrigin] - ](disposition) - - -# Options for behavior on timestamp wrap detection. -comptime AV_PTS_WRAP_IGNORE = 0 -comptime AV_PTS_WRAP_ADD_OFFSET = 1 -comptime AV_PTS_WRAP_SUB_OFFSET = -1 - - -@fieldwise_init -struct AVStream(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVStream.html." - - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var index: c_int - var id: c_int - var codecpar: UnsafePointer[AVCodecParameters, MutExternalOrigin] - var priv_data: OpaquePointer[MutExternalOrigin] - var time_base: AVRational - - var start_time: c_long_long - var duration: c_long_long - - var nb_frames: c_long_long - - var disposition: c_int - - var discard: AVDiscard.ENUM_DTYPE - - var sample_aspect_ratio: AVRational - - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - - var avg_frame_rate: AVRational - - var attached_pic: AVPacket - - var event_flags: c_int - - comptime AVSTREAM_EVENT_FLAG_METADATA_UPDATED = 0x0001 - comptime AVSTREAM_EVENT_FLAG_NEW_PACKETS = 1 << 1 - - var r_frame_rate: AVRational - - var pts_wrap_bits: c_int - - -@fieldwise_init -struct _AVStreamGroupTileGrid_offsets(Movable, Writable): - """Binding note: In the original header this is a anonymous struct. - Mojo does not support this, so we define this as a private, name spaced - struct outside of AVStreamGroupTileGrid. - """ - - var idx: c_uint - var horizontal: c_int - var vertical: c_int - - -@fieldwise_init -struct AVStreamGroupTileGrid(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVStreamGroupTileGrid.html." - - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var nb_tiles: c_uint - var coded_width: c_int - var coded_height: c_int - var offsets: UnsafePointer[ - _AVStreamGroupTileGrid_offsets, MutExternalOrigin - ] - - var background: StaticTuple[c_uchar, 4] - var horizontal_offset: c_int - var vertical_offset: c_int - var width: c_int - var height: c_int - var coded_side_data: UnsafePointer[AVPacketSideData, MutExternalOrigin] - var nb_coded_side_data: c_int - - -@fieldwise_init -struct AVStreamGroupLCEVC(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVStreamGroupLCEVC.html." - - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var lcevc_index: c_uint - var width: c_int - var height: c_int - - -@fieldwise_init -struct AVStreamGroupParamsType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_STREAM_GROUP_PARAMS_NONE = Self(0) - comptime AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT = Self(1) - comptime AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION = Self(2) - comptime AV_STREAM_GROUP_PARAMS_TILE_GRID = Self(3) - comptime AV_STREAM_GROUP_PARAMS_LCEVC = Self(4) - - -# TODO: Are these forward declaraions? -# struct AVIAMFAudioElement; -# struct AVIAMFMixPresentation; - - -@fieldwise_init -struct AVStreamGroup(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVStreamGroup.html." - - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var priv_data: OpaquePointer[MutExternalOrigin] - var index: c_uint - var id: c_long_long - var type: AVStreamGroupParamsType.ENUM_DTYPE - var params: C_Union[ - UnsafePointer[AVIAMFAudioElement, MutExternalOrigin], - UnsafePointer[AVIAMFMixPresentation, MutExternalOrigin], - UnsafePointer[AVStreamGroupTileGrid, MutExternalOrigin], - UnsafePointer[AVStreamGroupLCEVC, MutExternalOrigin], - ] - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - var nb_streams: c_uint - var streams: UnsafePointer[ - UnsafePointer[AVStream, MutExternalOrigin], MutExternalOrigin - ] - var disposition: c_int - - -fn av_stream_get_parser( - s: UnsafePointer[AVStream, ImmutExternalOrigin] -) -> UnsafePointer[AVCodecParserContext, ImmutExternalOrigin]: - return external_call[ - "av_stream_get_parser", - UnsafePointer[AVCodecParserContext, ImmutExternalOrigin], - ](s) - - -comptime AV_PROGRAM_RUNNING = 1 - - -@fieldwise_init -struct AVProgram(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVProgram.html." - - var id: c_int - var flags: c_int - var discard: AVDiscard.ENUM_DTYPE - var stream_index: UnsafePointer[c_uint, MutExternalOrigin] - var nb_stream_indexes: c_uint - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - - var program_num: c_int - var pmt_pid: c_int - var pcr_pid: c_int - var pmt_version: c_int - - # All fields below this line are not part of the public API. They - # may not be used outside of libavformat and can be changed and - # removed at will. - # New public fields should be added right above. - - var start_time: c_long_long - var end_time: c_long_long - - var pts_wrap_reference: c_long_long - var pts_wrap_behavior: c_int - - -comptime AVFMTCTX_NOHEADER = 0x0001 -comptime AVFMTCTX_UNSEEKABLE = 0x0002 - - -@fieldwise_init -struct AVChapter(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVChapter.html." - var id: c_long_long - var time_base: AVRational - var start: c_long_long - var end: c_long_long - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - - -# TODO: This is not a real function. This is a prototype used by AVFormatContext.control_message_cb. -# comptime av_format_control_message = ExternalFunction[ -# "av_format_control_message", -# fn ( -# s: UnsafePointer[AVFormatContext, MutExternalOrigin], -# type: c_int, -# data: OpaquePointer[MutExternalOrigin], -# data_size: c_size_t, -# ) -> c_int, -# ] - - -comptime AVOpenCallback = fn( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pb: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], - url: UnsafePointer[c_char, ImmutExternalOrigin], - flags: c_int, - int_cb: UnsafePointer[AVIOInterruptCB, ImmutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - - -@fieldwise_init -struct AVDurationEstimationMethod(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AVFMT_DURATION_FROM_PTS = Self(0) - comptime AVFMT_DURATION_FROM_STREAM = Self(1) - comptime AVFMT_DURATION_FROM_BITRATE = Self(2) - - -# @register_passable("trivial") -@fieldwise_init -struct AVFormatContext(Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVFormatContext.html." - - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var iformat: UnsafePointer[AVInputFormat, ImmutExternalOrigin] - var oformat: UnsafePointer[AVOutputFormat, ImmutExternalOrigin] - var priv_data: OpaquePointer[MutExternalOrigin] - var pb: UnsafePointer[AVIOContext, MutExternalOrigin] - # Stream info - var ctx_flags: c_int - var nb_streams: c_uint - var streams: UnsafePointer[ - UnsafePointer[AVStream, MutExternalOrigin], MutExternalOrigin - ] - var nb_stream_groups: c_uint - var stream_groups: UnsafePointer[ - UnsafePointer[AVStreamGroup, MutExternalOrigin], MutExternalOrigin - ] - - var nb_chapters: c_uint - - var chapters: UnsafePointer[ - UnsafePointer[AVChapter, MutExternalOrigin], MutExternalOrigin - ] - - var url: UnsafePointer[c_char, MutExternalOrigin] - var start_time: c_long_long - var duration: c_long_long - var bit_rate: c_long_long - var packet_size: c_uint - var max_delay: c_int - - var flags: c_int - comptime AVFMT_FLAG_GENPTS = 0x0001 - comptime AVFMT_FLAG_IGNIDX = 0x0002 - comptime AVFMT_FLAG_NONBLOCK = 0x0004 - comptime AVFMT_FLAG_IGNDTS = 0x0008 - comptime AVFMT_FLAG_NOFILLIN = 0x0010 - comptime AVFMT_FLAG_NOPARSE = 0x0020 - comptime AVFMT_FLAG_NOBUFFER = 0x0040 - comptime AVFMT_FLAG_CUSTOM_IO = 0x0080 - comptime AVFMT_FLAG_DISCARD_CORRUPT = 0x0100 - comptime AVFMT_FLAG_FLUSH_PACKETS = 0x0200 - - comptime AVFMT_FLAG_BITEXACT = 0x0400 - comptime AVFMT_FLAG_SORT_DTS = 0x10000 - comptime AVFMT_FLAG_FAST_SEEK = 0x80000 - comptime AVFMT_FLAG_AUTO_BSF = 0x200000 - - var probesize: c_long_long - var max_analyze_duration: c_long_long - - var key: UnsafePointer[c_uchar, ImmutExternalOrigin] - var keylen: c_int - - var nb_programs: c_uint - var programs: UnsafePointer[ - UnsafePointer[AVProgram, MutExternalOrigin], MutExternalOrigin - ] - - var video_codec_id: AVCodecID.ENUM_DTYPE - var audio_codec_id: AVCodecID.ENUM_DTYPE - var subtitle_codec_id: AVCodecID.ENUM_DTYPE - var data_codec_id: AVCodecID.ENUM_DTYPE - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - var start_time_realtime: c_long_long - var fps_probe_size: c_int - var error_recognition: c_int - var interrupt_callback: AVIOInterruptCB - var debug: c_int - comptime FF_FDEBUG_TS = 0x0001 - - var max_streams: c_int - var max_index_size: c_uint - var max_picture_buffer: c_uint - var max_interleave_delta: c_long_long - - var max_ts_probe: c_int - var max_chunk_duration: c_int - var max_chunk_size: c_int - var max_probe_packets: c_int - var strict_std_compliance: c_int - var event_flags: c_int - - comptime AVFMT_EVENT_FLAG_METADATA_UPDATED = 0x0001 - - var avoid_negative_ts: c_int - comptime AVFMT_AVOID_NEG_TS_AUTO = -1 - comptime AVFMT_AVOID_NEG_TS_DISABLED = 0 - comptime AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE = 1 - comptime AVFMT_AVOID_NEG_TS_MAKE_ZERO = 2 - var audio_preload: c_int - var use_wallclock_as_timestamps: c_int - var skip_estimate_duration_from_pts: c_int - var avio_flags: c_int - var duration_estimation_method: AVDurationEstimationMethod.ENUM_DTYPE - var skip_initial_bytes: c_long_long - var correct_ts_overflow: c_uint - var seek2any: c_int - var flush_packets: c_int - var probe_score: c_int - var format_probesize: c_int - var codec_whitelist: UnsafePointer[c_char, MutExternalOrigin] - var format_whitelist: UnsafePointer[c_char, MutExternalOrigin] - var protocol_whitelist: UnsafePointer[c_char, MutExternalOrigin] - var protocol_blacklist: UnsafePointer[c_char, MutExternalOrigin] - var io_repositioned: c_int - var video_codec: UnsafePointer[AVCodec, ImmutExternalOrigin] - var audio_codec: UnsafePointer[AVCodec, ImmutExternalOrigin] - var subtitle_codec: UnsafePointer[AVCodec, ImmutExternalOrigin] - var data_codec: UnsafePointer[AVCodec, ImmutExternalOrigin] - var metadata_header_padding: c_int - var opaque: OpaquePointer[MutExternalOrigin] - - # TODO: should these be pointers? How does this impact struct size? - # For some reason I can't define this under: av_format_control_message - # var control_message_cb: type_of(av_format_control_message) - var control_message_cb: fn( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - type: c_int, - data: OpaquePointer[MutExternalOrigin], - data_size: c_size_t, - ) -> c_int - var output_ts_offset: c_long_long - var dump_separator: UnsafePointer[c_uchar, MutExternalOrigin] - var io_open: fn( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pb: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], - url: UnsafePointer[c_char, ImmutExternalOrigin], - flags: c_int, - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], - ) -> c_int - var io_close2: fn( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pb: UnsafePointer[AVIOContext, MutExternalOrigin], - ) -> c_int - - var duration_probesize: c_long_long - - -fn avformat_version() -> c_uint: - return external_call["avformat_version", c_uint]() - - -fn avformat_configuration() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "avformat_configuration", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn avformat_license() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "avformat_license", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn avformat_network_init() -> c_int: - return external_call["avformat_network_init", c_int]() - - -fn avformat_network_deinit() -> c_int: - return external_call["avformat_network_deinit", c_int]() - - -fn av_muxer_iterate( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[AVOutputFormat, ImmutExternalOrigin]: - return external_call[ - "av_muxer_iterate", UnsafePointer[AVOutputFormat, ImmutExternalOrigin] - ](opaque) - - -fn av_demuxer_iterate( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[AVInputFormat, ImmutExternalOrigin]: - return external_call[ - "av_demuxer_iterate", UnsafePointer[AVInputFormat, ImmutExternalOrigin] - ](opaque) - - -fn avformat_alloc_context() -> ( - UnsafePointer[AVFormatContext, MutExternalOrigin] -): - return external_call[ - "avformat_alloc_context", - UnsafePointer[AVFormatContext, MutExternalOrigin], - ]() - - -fn avformat_free_context(s: UnsafePointer[AVFormatContext, MutExternalOrigin]): - external_call["avformat_free_context", NoneType](s) - - -fn avformat_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "avformat_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -fn av_stream_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "av_stream_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -fn av_stream_group_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "av_stream_group_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -fn avformat_stream_group_name( - type: AVStreamGroupParamsType.ENUM_DTYPE, -) -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "avformat_stream_group_name", UnsafePointer[c_char, ImmutExternalOrigin] - ](type) - - -fn avformat_stream_group_create( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - type: AVStreamGroupParamsType.ENUM_DTYPE, - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> UnsafePointer[AVStreamGroup, MutExternalOrigin]: - return external_call[ - "avformat_stream_group_create", - UnsafePointer[AVStreamGroup, MutExternalOrigin], - ](s, type, options) - - -fn avformat_new_stream( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - c: UnsafePointer[AVCodec, ImmutExternalOrigin], -) -> UnsafePointer[AVStream, MutExternalOrigin]: - return external_call[ - "avformat_new_stream", UnsafePointer[AVStream, MutExternalOrigin] - ](s, c) - - -fn avformat_stream_group_add_stream( - stg: UnsafePointer[AVStreamGroup, MutExternalOrigin], - st: UnsafePointer[AVStream, MutExternalOrigin], -) -> c_int: - return external_call["avformat_stream_group_add_stream", c_int](stg, st) - - -fn av_new_program( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], id: c_int -) -> UnsafePointer[AVProgram, MutExternalOrigin]: - return external_call[ - "av_new_program", UnsafePointer[AVProgram, MutExternalOrigin] - ](s, id) - - -fn avformat_alloc_output_context2( - ctx: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], - MutExternalOrigin, - ], - oformat: UnsafePointer[AVOutputFormat, ImmutExternalOrigin], - format_name: UnsafePointer[c_char, ImmutExternalOrigin], - filename: UnsafePointer[c_char, ImmutAnyOrigin], -) -> c_int: - return external_call["avformat_alloc_output_context2", c_int]( - ctx, oformat, format_name, filename - ) - - -fn alloc_output_context( - ctx: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], MutExternalOrigin - ], - oformat: UnsafePointer[AVOutputFormat, ImmutExternalOrigin], - format_name: UnsafePointer[c_char, ImmutExternalOrigin], - mut filename: String, -) -> c_int: - return avformat_alloc_output_context2( - ctx=ctx, - oformat=oformat, - format_name=format_name, - filename=filename.as_c_string_slice().unsafe_ptr().as_immutable(), - ) - - -fn alloc_output_context( - ctx: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], MutExternalOrigin - ], - mut filename: String, -) -> c_int: - return avformat_alloc_output_context2( - ctx=ctx, - oformat=UnsafePointer[AVOutputFormat, ImmutExternalOrigin](), - format_name=UnsafePointer[c_char, ImmutExternalOrigin](), - filename=filename.as_c_string_slice().unsafe_ptr().as_immutable(), - ) - - -fn av_find_input_format( - mut short_name: String, -) -> UnsafePointer[AVInputFormat, ImmutExternalOrigin]: - var short_name_ptr = ( - short_name.as_c_string_slice().unsafe_ptr().as_immutable() - ) - return external_call[ - "av_find_input_format", - UnsafePointer[AVInputFormat, ImmutExternalOrigin], - ](short_name_ptr) - - -fn av_probe_input_format( - pd: UnsafePointer[AVProbeData, ImmutExternalOrigin], is_opened: c_int -) -> UnsafePointer[AVInputFormat, ImmutExternalOrigin]: - return external_call[ - "av_probe_input_format", - UnsafePointer[AVInputFormat, ImmutExternalOrigin], - ](pd, is_opened) - - -fn av_probe_input_format2( - pd: UnsafePointer[AVProbeData, ImmutExternalOrigin], - is_opened: c_int, - score_max: UnsafePointer[c_int, MutExternalOrigin], -) -> UnsafePointer[AVInputFormat, ImmutExternalOrigin]: - return external_call[ - "av_probe_input_format2", - UnsafePointer[AVInputFormat, ImmutExternalOrigin], - ](pd, is_opened, score_max) - - -fn av_probe_input_format3( - pd: UnsafePointer[AVProbeData, ImmutExternalOrigin], - is_opened: c_int, - score_ret: UnsafePointer[c_int, MutExternalOrigin], -) -> UnsafePointer[AVInputFormat, ImmutExternalOrigin]: - return external_call[ - "av_probe_input_format3", - UnsafePointer[AVInputFormat, ImmutExternalOrigin], - ](pd, is_opened, score_ret) - - -fn av_probe_input_buffer2( - pb: UnsafePointer[AVIOContext, MutExternalOrigin], - fmt: UnsafePointer[ - UnsafePointer[AVInputFormat, ImmutExternalOrigin], MutExternalOrigin - ], - mut url: String, - logctx: OpaquePointer[MutExternalOrigin], - offset: c_uint, - max_probe_size: c_uint, -) -> c_int: - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_probe_input_buffer2", c_int]( - pb, fmt, url_ptr, logctx, offset, max_probe_size - ) - - -fn av_probe_input_buffer( - pb: UnsafePointer[AVIOContext, MutExternalOrigin], - fmt: UnsafePointer[ - UnsafePointer[AVInputFormat, ImmutExternalOrigin], MutExternalOrigin - ], - mut url: String, - logctx: OpaquePointer[MutExternalOrigin], - offset: c_uint, - max_probe_size: c_uint, -) -> c_int: - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_probe_input_buffer", c_int]( - pb, fmt, url_ptr, logctx, offset, max_probe_size - ) - - -fn avformat_open_input( - s: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], MutExternalOrigin - ], - mut url: String, - fmt: Optional[UnsafePointer[AVInputFormat, ImmutExternalOrigin]], - options: Optional[ - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ] - ], -) -> c_int: - var empty_options = options.Element() - var empty_fmt = UnsafePointer[AVInputFormat, MutExternalOrigin]() - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - var res = external_call["avformat_open_input", c_int]( - s, url_ptr, fmt.or_else(empty_fmt), options.or_else(empty_options) - ) - empty_fmt.free() - empty_options.free() - return res - - -fn avformat_find_stream_info( - ic: UnsafePointer[AVFormatContext, MutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["avformat_find_stream_info", c_int](ic, options) - - -fn av_find_program_from_stream( - ic: UnsafePointer[AVFormatContext, MutExternalOrigin], - last: UnsafePointer[AVProgram, MutExternalOrigin], - s: c_int, -) -> UnsafePointer[AVProgram, MutExternalOrigin]: - return external_call[ - "av_find_program_from_stream", - UnsafePointer[AVProgram, MutExternalOrigin], - ](ic, last, s) - - -fn av_program_add_stream_index( - ac: UnsafePointer[AVFormatContext, MutExternalOrigin], - progid: c_int, - idx: c_uint, -): - external_call["av_program_add_stream_index", NoneType](ac, progid, idx) - - -fn av_find_best_stream( - ic: UnsafePointer[AVFormatContext, MutExternalOrigin], - type: AVMediaType.ENUM_DTYPE, - wanted_stream_nb: c_int, - related_stream: c_int, - # TODO: I think only 1 of these needs to be immut. - decoder_ret: UnsafePointer[ - UnsafePointer[AVCodec, ImmutExternalOrigin], MutExternalOrigin - ], - flags: c_int, -) -> c_int: - return external_call["av_find_best_stream", c_int]( - ic, type, wanted_stream_nb, related_stream, decoder_ret, flags - ) - - -fn av_read_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) -> c_int: - return external_call["av_read_frame", c_int](s, pkt) - - -fn av_seek_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream_index: c_int, - timestamp: c_long_long, - flags: c_int, -) -> c_int: - return external_call["av_seek_frame", c_int]( - s, stream_index, timestamp, flags - ) - - -fn avformat_seek_file( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream_index: c_int, - min_ts: c_long_long, - ts: c_long_long, - max_ts: c_long_long, - flags: c_int, -) -> c_int: - return external_call["avformat_seek_file", c_int]( - s, stream_index, min_ts, ts, max_ts, flags - ) - - -fn avformat_flush(s: UnsafePointer[AVFormatContext, MutExternalOrigin]): - external_call["avformat_flush", NoneType](s) - - -fn av_read_play(s: UnsafePointer[AVFormatContext, MutExternalOrigin]) -> c_int: - return external_call["av_read_play", c_int](s) - - -fn av_read_pause(s: UnsafePointer[AVFormatContext, MutExternalOrigin]) -> c_int: - return external_call["av_read_pause", c_int](s) - - -fn avformat_close_input( - s: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["avformat_close_input", NoneType](s) - - -comptime AVSEEK_FLAG_BACKWARD = 1 -comptime AVSEEK_FLAG_BYTE = 2 -comptime AVSEEK_FLAG_ANY = 4 -comptime AVSEEK_FLAG_FRAME = 8 -comptime AVSTREAM_INIT_IN_WRITE_HEADER = 0 -comptime AVSTREAM_INIT_IN_INIT_OUTPUT = 1 - - -fn avformat_write_header( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["avformat_write_header", c_int](s, options) - - -fn avformat_init_output( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int: - return external_call["avformat_init_output", c_int](s, options) - - -fn av_write_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) -> c_int: - return external_call["av_write_frame", c_int](s, pkt) - - -fn av_interleaved_write_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) -> c_int: - return external_call["av_interleaved_write_frame", c_int](s, pkt) - - -fn av_write_uncoded_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream_index: c_int, - frame: UnsafePointer[AVFrame, MutExternalOrigin], -) -> c_int: - return external_call["av_write_uncoded_frame", c_int]( - s, stream_index, frame - ) - - -fn av_interleaved_write_uncoded_frame( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream_index: c_int, - frame: UnsafePointer[AVFrame, MutExternalOrigin], -) -> c_int: - return external_call["av_interleaved_write_uncoded_frame", c_int]( - s, stream_index, frame - ) - - -fn av_write_uncoded_frame_query( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], stream_index: c_int -) -> c_int: - return external_call["av_write_uncoded_frame_query", c_int](s, stream_index) - - -fn av_write_trailer( - s: UnsafePointer[AVFormatContext, MutExternalOrigin] -) -> c_int: - return external_call["av_write_trailer", c_int](s) - - -fn av_guess_format( - short_name: Optional[String] = None, - filename: Optional[String] = None, - mime_type: Optional[String] = None, -) -> UnsafePointer[AVOutputFormat, ImmutExternalOrigin]: - var short_name_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - var filename_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - var mime_type_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - - if short_name: - var short_name_str = short_name.value() - short_name_ptr = ( - short_name_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - if filename: - var filename_str = filename.value() - filename_ptr = ( - filename_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - if mime_type: - var mime_type_str = mime_type.value() - mime_type_ptr = ( - mime_type_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - return external_call[ - "av_guess_format", UnsafePointer[AVOutputFormat, ImmutExternalOrigin] - ](short_name_ptr, filename_ptr, mime_type_ptr) - - -fn av_guess_codec( - fmt: UnsafePointer[AVOutputFormat, ImmutExternalOrigin], - short_name: Optional[String], - filename: Optional[String], - mime_type: Optional[String], - type: AVMediaType.ENUM_DTYPE, -) -> AVCodecID.ENUM_DTYPE: - var short_name_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - var filename_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - var mime_type_ptr = UnsafePointer[c_char, ImmutAnyOrigin]() - if short_name: - var short_name_str = short_name.value() - short_name_ptr = ( - short_name_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - if filename: - var filename_str = filename.value() - filename_ptr = ( - filename_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - if mime_type: - var mime_type_str = mime_type.value() - mime_type_ptr = ( - mime_type_str.as_c_string_slice().unsafe_ptr().as_immutable() - ) - return external_call["av_guess_codec", AVCodecID.ENUM_DTYPE]( - fmt, short_name_ptr, filename_ptr, mime_type_ptr, type - ) - - -fn av_get_output_timestamp( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream: c_int, - dts: UnsafePointer[c_long_long, MutExternalOrigin], - wall: UnsafePointer[c_long_long, MutExternalOrigin], -) -> c_int: - return external_call["av_get_output_timestamp", c_int](s, stream, dts, wall) - - -fn av_hex_dump( - f: FILE_ptr, buf: UnsafePointer[c_uchar, ImmutExternalOrigin], size: c_int -): - external_call["av_hex_dump", NoneType](f, buf, size) - - -fn av_hex_dump_log( - avcl: OpaquePointer[MutExternalOrigin], - level: c_int, - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - size: c_int, -): - external_call["av_hex_dump_log", NoneType](avcl, level, buf, size) - - -fn av_pkt_dump2( - f: FILE_ptr, - pkt: UnsafePointer[AVPacket, ImmutExternalOrigin], - dump_payload: c_int, - st: UnsafePointer[AVStream, ImmutExternalOrigin], -): - external_call["av_pkt_dump2", NoneType](f, pkt, dump_payload, st) - - -fn av_pkt_dump_log2( - avcl: OpaquePointer[MutExternalOrigin], - level: c_int, - pkt: UnsafePointer[AVPacket, ImmutExternalOrigin], - dump_payload: c_int, - st: UnsafePointer[AVStream, ImmutExternalOrigin], -): - external_call["av_pkt_dump_log2", NoneType]( - avcl, level, pkt, dump_payload, st - ) - - -fn av_codec_get_id( - tags: UnsafePointer[ - UnsafePointer[AVCodecTag, ImmutExternalOrigin], ImmutExternalOrigin - ], - tag: c_uint, -) -> AVCodecID.ENUM_DTYPE: - return external_call["av_codec_get_id", AVCodecID.ENUM_DTYPE](tags, tag) - - -fn av_codec_get_tag( - tags: UnsafePointer[ - UnsafePointer[AVCodecTag, ImmutExternalOrigin], ImmutExternalOrigin - ], - id: AVCodecID.ENUM_DTYPE, -) -> c_uint: - return external_call["av_codec_get_tag", c_uint](tags, id) - - -fn av_codec_get_tag2( - tags: UnsafePointer[ - UnsafePointer[AVCodecTag, ImmutExternalOrigin], ImmutExternalOrigin - ], - id: AVCodecID.ENUM_DTYPE, - tag: UnsafePointer[c_uint, MutExternalOrigin], -) -> c_int: - return external_call["av_codec_get_tag2", c_int](tags, id, tag) - - -fn av_find_default_stream_index( - s: UnsafePointer[AVFormatContext, MutExternalOrigin] -) -> c_int: - return external_call["av_find_default_stream_index", c_int](s) - - -fn av_index_search_timestamp( - st: UnsafePointer[AVStream, MutExternalOrigin], - timestamp: c_long_long, - flags: c_int, -) -> c_int: - return external_call["av_index_search_timestamp", c_int]( - st, timestamp, flags - ) - - -fn avformat_index_get_entries_count( - st: UnsafePointer[AVStream, MutExternalOrigin] -) -> c_int: - return external_call["avformat_index_get_entries_count", c_int](st) - - -fn avformat_index_get_entry( - st: UnsafePointer[AVStream, MutExternalOrigin], idx: c_int -) -> UnsafePointer[AVIndexEntry, ImmutExternalOrigin]: - return external_call[ - "avformat_index_get_entry", - UnsafePointer[AVIndexEntry, ImmutExternalOrigin], - ](st, idx) - - -fn avformat_index_get_entry_from_timestamp( - st: UnsafePointer[AVStream, MutExternalOrigin], - timestamp: c_long_long, - flags: c_int, -) -> UnsafePointer[AVIndexEntry, ImmutExternalOrigin]: - return external_call[ - "avformat_index_get_entry_from_timestamp", - UnsafePointer[AVIndexEntry, ImmutExternalOrigin], - ](st, timestamp, flags) - - -fn av_add_index_entry( - st: UnsafePointer[AVStream, MutExternalOrigin], - pos: c_long_long, - timestamp: c_long_long, - size: c_int, - distance: c_int, - flags: c_int, -) -> c_int: - return external_call["av_add_index_entry", c_int]( - st, pos, timestamp, size, distance, flags - ) - - -fn av_url_split( - proto: UnsafePointer[c_char, MutExternalOrigin], - proto_size: c_int, - authorization: UnsafePointer[c_char, MutExternalOrigin], - authorization_size: c_int, - hostname: UnsafePointer[c_char, MutExternalOrigin], - hostname_size: c_int, - port_ptr: UnsafePointer[c_int, MutExternalOrigin], - path: UnsafePointer[c_char, MutExternalOrigin], - path_size: c_int, - url: UnsafePointer[c_char, ImmutAnyOrigin], -): - external_call["av_url_split", NoneType]( - proto, - proto_size, - authorization, - authorization_size, - hostname, - hostname_size, - port_ptr, - path, - path_size, - url, - ) - - -fn av_dump_format( - ic: UnsafePointer[AVFormatContext, MutExternalOrigin], - index: c_int, - mut url: String, - is_output: c_int, -): - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - external_call["av_dump_format", NoneType](ic, index, url_ptr, is_output) - - -comptime AV_FRAME_FILENAME_FLAGS_MULTIPLE = 1 - - -fn av_get_frame_filename2( - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_int, - mut path: String, - number: c_int, - flags: c_int, -) -> c_int: - var path_ptr = path.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_get_frame_filename2", c_int]( - buf, buf_size, path_ptr, number, flags - ) - - -fn av_get_frame_filename( - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_int, - mut path: String, - number: c_int, -) -> c_int: - var path_ptr = path.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_get_frame_filename", c_int]( - buf, buf_size, path_ptr, number - ) - - -fn av_filename_number_test(mut filename: String) -> c_int: - var filename_ptr = filename.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["av_filename_number_test", c_int](filename_ptr) - - -fn av_sdp_create( - ac: UnsafePointer[ - UnsafePointer[AVFormatContext, MutExternalOrigin], MutExternalOrigin - ], - n_files: c_int, - buf: UnsafePointer[c_char, MutExternalOrigin], - size: c_int, -) -> c_int: - return external_call["av_sdp_create", c_int](ac, n_files, buf, size) - - -fn av_match_ext( - mut filename: String, - mut extensions: String, -) -> c_int: - var filename_ptr = filename.as_c_string_slice().unsafe_ptr().as_immutable() - var extensions_ptr = ( - extensions.as_c_string_slice().unsafe_ptr().as_immutable() - ) - return external_call["av_match_ext", c_int](filename_ptr, extensions_ptr) - - -fn avformat_query_codec( - ofmt: UnsafePointer[AVOutputFormat, ImmutExternalOrigin], - codec_id: AVCodecID.ENUM_DTYPE, - std_compliance: c_int, -) -> c_int: - return external_call["avformat_query_codec", c_int]( - ofmt, codec_id, std_compliance - ) - - -# Get the tables mapping RIFF FourCCs for video to libavcodec AVCodecID. The -# tables are meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the -# following code: -# @code -# uint32_t tag = MKTAG('H', '2', '6', '4'); -# const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; -# enum AVCodecID id = av_codec_get_id(table, tag); -# @endcode -fn avformat_get_riff_video_tags() -> ( - UnsafePointer[AVCodecTag, ImmutExternalOrigin] -): - return external_call[ - "avformat_get_riff_video_tags", - UnsafePointer[AVCodecTag, ImmutExternalOrigin], - ]() - - -fn avformat_get_riff_audio_tags() -> ( - UnsafePointer[AVCodecTag, ImmutExternalOrigin] -): - return external_call[ - "avformat_get_riff_audio_tags", - UnsafePointer[AVCodecTag, ImmutExternalOrigin], - ]() - - -fn avformat_get_mov_video_tags() -> ( - UnsafePointer[AVCodecTag, ImmutExternalOrigin] -): - return external_call[ - "avformat_get_mov_video_tags", - UnsafePointer[AVCodecTag, ImmutExternalOrigin], - ]() - - -fn avformat_get_mov_audio_tags() -> ( - UnsafePointer[AVCodecTag, ImmutExternalOrigin] -): - return external_call[ - "avformat_get_mov_audio_tags", - UnsafePointer[AVCodecTag, ImmutExternalOrigin], - ]() - - -fn av_guess_sample_aspect_ratio( - format: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream: UnsafePointer[AVStream, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], -) -> AVRational: - return external_call["av_guess_sample_aspect_ratio", AVRational]( - format, stream, frame - ) - - -fn av_guess_frame_rate( - ctx: UnsafePointer[AVFormatContext, MutExternalOrigin], - stream: UnsafePointer[AVStream, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], -) -> AVRational: - return external_call["av_guess_frame_rate", AVRational](ctx, stream, frame) - - -fn avformat_match_stream_specifier( - s: UnsafePointer[AVFormatContext, MutExternalOrigin], - st: UnsafePointer[AVStream, MutExternalOrigin], - # spec: UnsafePointer[c_char, ImmutExternalOrigin], - mut spec: String, -) -> c_int: - var spec_ptr = spec.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["avformat_match_stream_specifier", c_int]( - s, st, spec_ptr - ) - - -fn avformat_queue_attached_pictures( - s: UnsafePointer[AVFormatContext, MutExternalOrigin] -) -> c_int: - return external_call["avformat_queue_attached_pictures", c_int](s) - - -# Note: this section is in the original header file, however is being deprecated. -# AVTimebaseSource -# avformat_transfer_internal_stream_timing_info -# av_stream_get_codec_timebase -# Are all behind a macro flag with APIs that are being deprecated. diff --git a/ash_dynamics/ffmpeg/avformat/avio.mojo b/ash_dynamics/ffmpeg/avformat/avio.mojo deleted file mode 100644 index fe0c6e5..0000000 --- a/ash_dynamics/ffmpeg/avformat/avio.mojo +++ /dev/null @@ -1,504 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/avio_8h.html." -from std.ffi import ( - c_int, - c_char, - c_long_long, - c_uchar, - c_ulong, - c_ulong_long, - c_uint, - c_size_t, - external_call, -) -from std.utils import StaticTuple -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.primitives._clib import C_Union - - -comptime AVIO_SEEKABLE_NORMAL = 1 << 0 -"Seeking works like for a local file." -comptime AVIO_SEEKABLE_TIME = 1 << 1 -"Seeking by timestamp with avio_seek_time() is possible." - - -@fieldwise_init -struct AVIOInterruptCB(Movable, Writable): - """This structure contains a callback for checking whether to abort blocking functions. - """ - - var callback: fn(opaque: OpaquePointer[MutExternalOrigin]) -> c_int - var opaque: OpaquePointer[MutExternalOrigin] - - -@fieldwise_init -struct AVIODirEntryType(Movable, Writable): - """This structure contains a directory entry type.""" - - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AVIO_ENTRY_UNKNOWN = Self(0) - comptime AVIO_ENTRY_BLOCK_DEVICE = Self(1) - comptime AVIO_ENTRY_CHARACTER_DEVICE = Self(2) - comptime AVIO_ENTRY_DIRECTORY = Self(3) - comptime AVIO_ENTRY_NAMED_PIPE = Self(4) - comptime AVIO_ENTRY_SYMBOLIC_LINK = Self(5) - comptime AVIO_ENTRY_SOCKET = Self(6) - - -@fieldwise_init -struct AVIODirEntry(Movable, Writable): - """See https://www.ffmpeg.org/doxygen/8.0/structAVIODirEntry.html.""" - - var name: UnsafePointer[c_char, MutExternalOrigin] - var type: AVIODirEntryType.ENUM_DTYPE - var utf8: c_int - var size: c_long_long - var modification_timestamp: c_long_long - var access_timestamp: c_long_long - var status_change_timestamp: c_long_long - var user_id: c_long_long - var group_id: c_long_long - var filemode: c_long_long - - -# TODO: Is this a forward declaration? -struct AVIODirContext(Movable, Writable): - pass - - -@fieldwise_init -struct AVIODataMarkerType(Movable, Writable): - """This structure contains a data marker type.""" - - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AVIO_DATA_MARKER_HEADER = Self(0) - comptime AVIO_DATA_MARKER_SYNC_POINT = Self(1) - comptime AVIO_DATA_MARKER_BOUNDARY_POINT = Self(2) - comptime AVIO_DATA_MARKER_UNKNOWN = Self(3) - comptime AVIO_DATA_MARKER_TRAILER = Self(4) - comptime AVIO_DATA_MARKER_FLUSH_POINT = Self(5) - - -@fieldwise_init -struct AVIOContext(Movable, Writable): - """See https://www.ffmpeg.org/doxygen/8.0/structAVIOContext.html.""" - - var av_class: UnsafePointer[AVClass, MutExternalOrigin] - var buffer: UnsafePointer[c_uchar, MutExternalOrigin] - var buffer_size: c_int - var buf_ptr: UnsafePointer[c_uchar, MutExternalOrigin] - var buf_end: UnsafePointer[c_uchar, MutExternalOrigin] - var opaque: OpaquePointer[MutExternalOrigin] - var read_packet: fn( - opaque: OpaquePointer[MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - ) -> c_int - var write_packet: fn( - opaque: OpaquePointer[MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - ) -> c_int - var seek: fn( - opaque: OpaquePointer[MutExternalOrigin], - offset: c_long_long, - whence: c_int, - ) -> c_long_long - var pos: c_long_long - var eof_reached: c_int - var error: c_int - var write_flag: c_int - var max_packet_size: c_int - var min_packet_size: c_int - var checksum: c_ulong - var checksum_ptr: UnsafePointer[c_uchar, MutExternalOrigin] - var update_checksum: fn( - checksum: c_ulong, - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - size: c_uint, - ) -> c_ulong - var read_pause: fn( - opaque: OpaquePointer[MutExternalOrigin], - pause: c_int, - ) -> c_int - var read_seek: fn( - opaque: OpaquePointer[MutExternalOrigin], - stream_index: c_int, - timestamp: c_long_long, - flags: c_int, - ) -> c_long_long - var seekable: c_int - var direct: c_int - var protocol_whitelist: UnsafePointer[c_char, ImmutExternalOrigin] - var protocol_blacklist: UnsafePointer[c_char, ImmutExternalOrigin] - var write_data_type: fn( - opaque: OpaquePointer[MutExternalOrigin], - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - buf_size: c_int, - type: AVIODataMarkerType.ENUM_DTYPE, - time: c_long_long, - ) -> c_int - - var ignore_boundary_point: c_int - var buf_ptr_max: UnsafePointer[c_uchar, MutExternalOrigin] - var bytes_read: c_long_long - var bytes_written: c_long_long - - -comptime avio_find_protocol_name = fn( - url: UnsafePointer[c_char, ImmutExternalOrigin], -) -> UnsafePointer[c_char, ImmutExternalOrigin] - -comptime avio_check = fn( - url: UnsafePointer[c_char, ImmutExternalOrigin], - flags: c_int, -) -> c_int - -comptime avio_open_dir = fn( - s: UnsafePointer[ - UnsafePointer[AVIODirContext, MutExternalOrigin], MutExternalOrigin - ], - url: UnsafePointer[c_char, ImmutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_read_dir = fn( - s: UnsafePointer[AVIODirContext, MutExternalOrigin], - next: UnsafePointer[ - UnsafePointer[AVIODirEntry, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_close_dir = fn( - s: UnsafePointer[ - UnsafePointer[AVIODirContext, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_free_directory_entry = fn( - entry: UnsafePointer[ - UnsafePointer[AVIODirEntry, MutExternalOrigin], MutExternalOrigin - ], -) -> NoneType - -comptime avio_alloc_context = fn( - buffer: UnsafePointer[c_uchar, MutExternalOrigin], - buffer_size: c_int, - write_flag: c_int, - opaque: OpaquePointer[MutExternalOrigin], - read_packet: fn( - opaque: OpaquePointer[MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - ) -> c_int, - write_packet: fn( - opaque: OpaquePointer[MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - buf_size: c_int, - ) -> c_int, - seek: fn( - opaque: OpaquePointer[MutExternalOrigin], - offset: c_long_long, - whence: c_int, - ) -> c_long_long, -) -> UnsafePointer[AVIOContext, MutExternalOrigin] - -comptime avio_context_free = fn( - s: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], -) -> NoneType - -comptime avio_w8 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - b: c_int, -) -> NoneType -comptime avio_write = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - buf: UnsafePointer[c_uchar, ImmutExternalOrigin], - size: c_int, -) -> NoneType -comptime avio_wl64 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_ulong_long, -) -> NoneType -comptime avio_wb64 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_ulong_long, -) -> NoneType -comptime avio_wl32 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType -comptime avio_wb32 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType -comptime avio_wl24 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType -comptime avio_wb24 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType -comptime avio_wl16 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType -comptime avio_wb16 = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - val: c_uint, -) -> NoneType - -comptime avio_put_str = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> c_int - -comptime avio_put_str16le = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> c_int - -comptime avio_put_str16be = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> c_int - -comptime avio_write_marker = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - time: c_long_long, - type: AVIODataMarkerType.ENUM_DTYPE, -) -> NoneType - -comptime AVSEEK_SIZE = 0x10000 -comptime AVSEEK_FORCE = 0x20000 - -comptime avio_seek = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - offset: c_long_long, - whence: c_int, -) -> c_long_long -comptime avio_skip = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - offset: c_long_long, -) -> c_long_long - -# TODO: Reimplement in the DLHandle -# @always_inline -# fn avio_tell(s: UnsafePointer[AVIOContext, MutExternalOrigin]) -> c_long_long: -# """ftell() equivalent for AVIOContext. - -# Returns: -# - the current position or AVERROR. -# """ -# return avio_seek(s, 0, std.os.SEEK_CUR) - - -comptime avio_size = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], -) -> c_long_long - -comptime avio_feof = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], -) -> c_int - -# Note: without a helper.c if some kind, we cannot support functions like this, -# since we will not have access to the `va_list` type. -# int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap); - -comptime avio_printf = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - fmt: UnsafePointer[c_char, ImmutExternalOrigin] - # ...: Any, TODO: Not sure if we can support this. -) -> c_int - -comptime avio_print_string_array = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - strings: UnsafePointer[ - UnsafePointer[c_char, ImmutExternalOrigin], ImmutExternalOrigin - ], -) -> NoneType -# NOTE: The docs have it as `int void` which doesn't make sense. - -# TODO: Not sure if we can support this. -# Mojo has no way of accessing the __VA_ARGS__ or va_lists. -# #define avio_print(s, ...) \ -# avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -comptime avio_flush = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], -) -> NoneType - -comptime avio_read = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - size: c_int, -) -> c_int - -comptime avio_read_partial = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - buf: UnsafePointer[c_uchar, MutExternalOrigin], - size: c_int, -) -> c_int - -# Functions for reading from AVIOContext -comptime AVIOContextMutPtr = UnsafePointer[AVIOContext, MutExternalOrigin] -comptime avio_r8 = fn(s: AVIOContextMutPtr) -> c_int -comptime avio_rl16 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rl24 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rl32 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rl64 = fn(s: AVIOContextMutPtr) -> c_ulong_long -comptime avio_rb16 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rb24 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rb32 = fn(s: AVIOContextMutPtr) -> c_uint -comptime avio_rb64 = fn(s: AVIOContextMutPtr) -> c_ulong_long - - -comptime avio_get_str = fn( - s: AVIOContextMutPtr, - maxlen: c_int, - buf: UnsafePointer[c_char, MutExternalOrigin], - buflen: c_int, -) -> c_int - -comptime avio_get_str16le = fn( - s: AVIOContextMutPtr, - maxlen: c_int, - buf: UnsafePointer[c_char, MutExternalOrigin], - buflen: c_int, -) -> c_int - -comptime avio_get_str16be = fn( - s: AVIOContextMutPtr, - maxlen: c_int, - buf: UnsafePointer[c_char, MutExternalOrigin], - buflen: c_int, -) -> c_int - -comptime AVIO_FLAG_READ = 1 -comptime AVIO_FLAG_WRITE = 2 -comptime AVIO_FLAG_READ_WRITE = AVIO_FLAG_READ | AVIO_FLAG_WRITE -comptime AVIO_FLAG_NONBLOCK = 8 -comptime AVIO_FLAG_DIRECT = 0x8000 - - -fn avio_open( - s: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], - mut url: String, - flags: c_int, -) -> c_int: - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - return external_call["avio_open", c_int](s, url_ptr, flags) - - -fn avio_open( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - mut url: String, - flags: c_int, -) -> c_int: - var s_ptr = alloc[type_of(s)](1) - s_ptr[] = s - var res = external_call["avio_open", c_int](s_ptr, url, flags) - s_ptr.free() - return res - - -comptime avio_open2 = fn( - s: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], - url: UnsafePointer[c_char, ImmutAnyOrigin], - flags: c_int, - int_cb: UnsafePointer[AVIOInterruptCB, ImmutExternalOrigin], - options: UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - - -fn avio_close(s: UnsafePointer[AVIOContext, MutExternalOrigin]) -> c_int: - return external_call["avio_close", c_int](s) - - -fn avio_closep( - s: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ] -) -> c_int: - return external_call["avio_closep", c_int](s) - - -comptime avio_open_dyn_buf = fn( - s: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_get_dyn_buf = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pbuffer: UnsafePointer[ - UnsafePointer[c_uchar, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_close_dyn_buf = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pbuffer: UnsafePointer[ - UnsafePointer[c_uchar, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_enum_protocols = fn( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin], - output: c_int, -) -> UnsafePointer[c_char, ImmutExternalOrigin] - -comptime avio_protocol_get_class = fn( - name: UnsafePointer[c_char, ImmutExternalOrigin], -) -> UnsafePointer[AVClass, ImmutExternalOrigin] - -comptime avio_pause = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pause: c_int, -) -> c_int - -comptime avio_seek_time = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - stream_index: c_int, - timestamp: c_long_long, - flags: c_int, -) -> c_long_long - - -@fieldwise_init -struct AVBPrint(Movable, Writable): - "Avoid a warning. The header can not be included because it breaks c++." - pass - - -comptime avio_read_to_bprint = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - pb: UnsafePointer[AVBPrint, MutExternalOrigin], - max_size: c_size_t, -) -> c_int - -comptime avio_accept = fn( - s: UnsafePointer[AVIOContext, MutExternalOrigin], - c: UnsafePointer[ - UnsafePointer[AVIOContext, MutExternalOrigin], MutExternalOrigin - ], -) -> c_int - -comptime avio_handshake = fn( - c: UnsafePointer[AVIOContext, MutExternalOrigin], -) -> c_int diff --git a/ash_dynamics/ffmpeg/avformat/internal.mojo b/ash_dynamics/ffmpeg/avformat/internal.mojo deleted file mode 100644 index 1e39548..0000000 --- a/ash_dynamics/ffmpeg/avformat/internal.mojo +++ /dev/null @@ -1,106 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/libavformat_2internal_8h_source.html." -from std.ffi import c_uint, c_char, c_long_long, c_int -from std.utils import StaticTuple -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avformat.avformat import AVFormatContext -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary - - -comptime MAX_URL_SIZE = 4096 - -comptime PROBE_BUF_MIN = 2048 -"Size of the probe buffer, for guessing file type from file contents." -comptime PROBE_BUF_MAX = 1 << 20 - - -@fieldwise_init -struct AVCodecTag(Movable, Writable): - """This structure contains a list of codec tags.""" - - var id: AVCodecID.ENUM_DTYPE - var tag: c_uint - - -@fieldwise_init -struct CodecMime(Movable, Writable): - """This structure contains a list of codec mime types.""" - - var str: StaticTuple[c_char, 32] - var id: AVCodecID.ENUM_DTYPE - - -# Fractional numbers for exact pts handling. -@fieldwise_init -struct FFFrac(Movable, Writable): - """This structure contains a fractional number.""" - - var val: c_long_long - var num: c_long_long - var den: c_long_long - - -# @fieldwise_init -# struct _FFFormatContext_avoid_negative_ts_status: -# comptime ENUM_DTYPE = c_int -# var value: Self.ENUM_DTYPE - -# comptime AVOID_NEGATIVE_TS_DISABLED = Self(-1) -# """Disabled""" -# comptime AVOID_NEGATIVE_TS_UNKNOWN = Self(0) -# """Not yet determined""" -# comptime AVOID_NEGATIVE_TS_KNOWN = Self(1) -# """Determined""" - - -# @fieldwise_init -# @register_passable("trivial") -# struct FFFormatContext: -# """This structure contains a format context.""" -# var pub: AVFormatContext -# """The public context.""" -# var avoid_negative_ts_status: _FFFormatContext_avoid_negative_ts_status.ENUM_DTYPE -# """Whether the timestamp shift offset has already been determined.""" - -# @staticmethod -# fn AVOID_NEGATIVE_TS_ENABLED(status: Int) -> Bool: -# return status >= 0 - -# var packet_buffer: PacketList -# """This buffer is only needed when packets were already buffered but -# not decoded, for example to get the codec parameters in MPEG -# streams.""" -# # av_seek_frame() support -# var data_offset: c_long_long -# """The offset of the first packet.""" -# var parse_pkt: UnsafePointer[AVPacket, MutExternalOrigin] -# """The generic code uses this as a temporary packet -# to parse packets or for muxing, especially flushing. -# For demuxers, it may also be used for other means -# for short periods that are guaranteed not to overlap -# with calls to av_read_frame() (or ff_read_packet()) -# or with each other. - -# It may be used by demuxers as a replacement for -# stack packets (unless they call one of the aforementioned -# functions with their own AVFormatContext). -# Every user has to ensure that this packet is blank -# after using it. -# """ -# var pkt: UnsafePointer[AVPacket, MutExternalOrigin] -# """Used to hold temporary packets for the generic demuxing code. -# When muxing, it may be used by muxers to hold packets (even -# permanent ones).""" -# var avoid_negative_ts_use_pts: c_int -# """Whether to use pts for negative timestamp shift offset determination.""" -# var id3v2_meta: UnsafePointer[AVDictionary, MutExternalOrigin] -# """ID3v2 tag useful for MP3 demuxing""" -# var missing_streams: c_int -# """Whether any streams are missing.""" - - -# @always_inline -# fn ffformatcontext( -# s: UnsafePointer[AVFormatContext, MutExternalOrigin] -# ) -> UnsafePointer[FFFormatContext, MutExternalOrigin]: -# return rebind(s, FFFormatContext) diff --git a/ash_dynamics/ffmpeg/avutil/__init__.mojo b/ash_dynamics/ffmpeg/avutil/__init__.mojo deleted file mode 100644 index e349090..0000000 --- a/ash_dynamics/ffmpeg/avutil/__init__.mojo +++ /dev/null @@ -1,8 +0,0 @@ -"""See https://www.ffmpeg.org/doxygen/8.0/avutil_8h_source.html.""" -from ash_dynamics.ffmpeg.avutil.error import * -from ash_dynamics.ffmpeg.avutil.avconfig import * -from ash_dynamics.ffmpeg.avutil.buffer import * -from ash_dynamics.ffmpeg.avutil.channel_layout import * -from ash_dynamics.ffmpeg.avutil.mathematics import * -from ash_dynamics.ffmpeg.avutil.frame import * -from ash_dynamics.ffmpeg.avutil.mem import * diff --git a/ash_dynamics/ffmpeg/avutil/avconfig.mojo b/ash_dynamics/ffmpeg/avutil/avconfig.mojo deleted file mode 100644 index bdcfc55..0000000 --- a/ash_dynamics/ffmpeg/avutil/avconfig.mojo +++ /dev/null @@ -1,6 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/avutil_8h.html." -from std.ffi import c_int - -# TODO: Swap the asisgnments for parameterized functions once the need arises. -comptime AV_HAVE_BIGENDIAN: c_int = 0 -comptime AV_HAVE_FAST_UNALIGNED: c_int = 1 diff --git a/ash_dynamics/ffmpeg/avutil/avutil.mojo b/ash_dynamics/ffmpeg/avutil/avutil.mojo deleted file mode 100644 index af895cf..0000000 --- a/ash_dynamics/ffmpeg/avutil/avutil.mojo +++ /dev/null @@ -1,46 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/avutil_8h.html." -from std.ffi import c_int, c_uint, c_long_long, c_ulong_long - - -comptime AV_NOPTS_VALUE = c_long_long(c_ulong_long(0x8000000000000000)) - - -@fieldwise_init("implicit") -struct AVPictureType(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - comptime AV_PICTURE_TYPE_NONE = Self(0) - comptime AV_PICTURE_TYPE_I = Self(1) - comptime AV_PICTURE_TYPE_P = Self(2) - comptime AV_PICTURE_TYPE_B = Self(3) - comptime AV_PICTURE_TYPE_S = Self(4) - comptime AV_PICTURE_TYPE_SI = Self(5) - comptime AV_PICTURE_TYPE_SP = Self(6) - comptime AV_PICTURE_TYPE_BI = Self(7) - - -@fieldwise_init("implicit") -struct AVMediaType(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - # < Usually treated as AVMEDIA_TYPE_DATA - comptime AVMEDIA_TYPE_UNKNOWN = Self(-1) - comptime AVMEDIA_TYPE_VIDEO = Self(Self.AVMEDIA_TYPE_UNKNOWN._value).inc() - comptime AVMEDIA_TYPE_AUDIO = Self(Self.AVMEDIA_TYPE_VIDEO._value).inc() - - # < Opaque data information usually continuous - comptime AVMEDIA_TYPE_DATA = Self(Self.AVMEDIA_TYPE_AUDIO._value).inc() - comptime AVMEDIA_TYPE_SUBTITLE = Self(Self.AVMEDIA_TYPE_DATA._value).inc() - - # < Opaque data information usually sparse - comptime AVMEDIA_TYPE_ATTACHMENT = Self( - Self.AVMEDIA_TYPE_SUBTITLE._value - ).inc() - comptime AVMEDIA_TYPE_NB = Self(Self.AVMEDIA_TYPE_ATTACHMENT._value).inc() diff --git a/ash_dynamics/ffmpeg/avutil/buffer.mojo b/ash_dynamics/ffmpeg/avutil/buffer.mojo deleted file mode 100644 index 2f09540..0000000 --- a/ash_dynamics/ffmpeg/avutil/buffer.mojo +++ /dev/null @@ -1,169 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/buffer_8h.html." -from std.ffi import c_uchar, c_uint, c_int, c_size_t, external_call -from std.os.atomic import Atomic - - -struct AVBuffer(Movable): - pass - - -@fieldwise_init -struct AVBufferRef(TrivialRegisterPassable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVBufferRef.html." - var buffer: UnsafePointer[AVBuffer, origin=MutExternalOrigin] - var data: UnsafePointer[c_uchar, origin=MutExternalOrigin] - var size: c_size_t - - -fn av_buffer_alloc( - size: c_size_t, -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_buffer_alloc", UnsafePointer[AVBufferRef, MutExternalOrigin] - ](size) - - -fn av_buffer_allocz( - size: c_size_t, -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_buffer_allocz", UnsafePointer[AVBufferRef, MutExternalOrigin] - ](size) - - -comptime AV_BUFFER_FLAG_READONLY = c_int(1 << 0) - - -fn av_buffer_create( - data: UnsafePointer[c_uchar, MutExternalOrigin], - size: c_size_t, - free: fn( - OpaquePointer[MutExternalOrigin], - UnsafePointer[c_uchar, MutExternalOrigin], - ) -> NoneType, - opaque: OpaquePointer[MutExternalOrigin], - flags: c_int, -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_buffer_create", UnsafePointer[AVBufferRef, MutExternalOrigin] - ](data, size, free, opaque, flags) - - -fn av_buffer_default_free( - opaque: OpaquePointer[MutExternalOrigin], - data: UnsafePointer[c_uchar, MutExternalOrigin], -): - external_call["av_buffer_default_free", NoneType](opaque, data) - - -fn av_buffer_ref( - buf: UnsafePointer[AVBufferRef, ImmutExternalOrigin] -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_buffer_ref", UnsafePointer[AVBufferRef, MutExternalOrigin] - ](buf) - - -fn av_buffer_unref( - buf: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["av_buffer_unref", NoneType](buf) - - -fn av_buffer_is_writable( - buf: UnsafePointer[AVBufferRef, ImmutExternalOrigin] -) -> c_int: - return external_call["av_buffer_is_writable", c_int](buf) - - -fn av_buffer_get_opaque( - buf: UnsafePointer[AVBufferRef, ImmutExternalOrigin] -) -> OpaquePointer[MutExternalOrigin]: - return external_call[ - "av_buffer_get_opaque", OpaquePointer[MutExternalOrigin] - ](buf) - - -fn av_buffer_get_ref_count( - buf: UnsafePointer[AVBufferRef, ImmutExternalOrigin] -) -> c_int: - return external_call["av_buffer_get_ref_count", c_int](buf) - - -fn av_buffer_make_writable( - buf: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ] -) -> c_int: - return external_call["av_buffer_make_writable", c_int](buf) - - -fn av_buffer_realloc( - buf: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ], - size: c_size_t, -) -> c_int: - return external_call["av_buffer_realloc", c_int](buf, size) - - -fn av_buffer_replace( - dst: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ], - src: UnsafePointer[AVBufferRef, ImmutExternalOrigin], -) -> c_int: - return external_call["av_buffer_replace", c_int](dst, src) - - -@fieldwise_init -struct AVBufferPool(Movable): - pass - - -fn av_buffer_pool_init( - size: c_size_t, - alloc: fn(c_size_t) -> UnsafePointer[AVBufferRef, MutExternalOrigin], -) -> UnsafePointer[AVBufferPool, MutExternalOrigin]: - return external_call[ - "av_buffer_pool_init", UnsafePointer[AVBufferPool, MutExternalOrigin] - ](size, alloc) - - -fn av_buffer_pool_init2( - size: c_size_t, - opaque: OpaquePointer[MutExternalOrigin], - alloc: fn(OpaquePointer[MutExternalOrigin], c_size_t) -> UnsafePointer[ - AVBufferRef, MutExternalOrigin - ], - pool_free: fn(OpaquePointer[MutExternalOrigin]) -> NoneType, -) -> UnsafePointer[AVBufferPool, MutExternalOrigin]: - return external_call[ - "av_buffer_pool_init2", UnsafePointer[AVBufferPool, MutExternalOrigin] - ](size, opaque, alloc, pool_free) - - -fn av_buffer_pool_uninit( - pool: UnsafePointer[ - UnsafePointer[AVBufferPool, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["av_buffer_pool_uninit", NoneType](pool) - - -fn av_buffer_pool_get( - pool: UnsafePointer[AVBufferPool, MutExternalOrigin] -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_buffer_pool_get", UnsafePointer[AVBufferRef, MutExternalOrigin] - ](pool) - - -fn av_buffer_pool_buffer_get_opaque( - ref_: UnsafePointer[AVBufferRef, ImmutExternalOrigin] -) -> OpaquePointer[MutExternalOrigin]: - return external_call[ - "av_buffer_pool_buffer_get_opaque", OpaquePointer[MutExternalOrigin] - ](ref_) diff --git a/ash_dynamics/ffmpeg/avutil/buffer_internal.mojo b/ash_dynamics/ffmpeg/avutil/buffer_internal.mojo deleted file mode 100644 index bc43503..0000000 --- a/ash_dynamics/ffmpeg/avutil/buffer_internal.mojo +++ /dev/null @@ -1,20 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/buffer__internal_8h.html." -from std.ffi import c_uchar, c_uint, c_int, c_size_t -from std.os.atomic import Atomic, Consistency, fence - - -@fieldwise_init -struct AVBuffer(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVBuffer.html." - var data: UnsafePointer[c_uchar, origin=MutExternalOrigin] - var size: c_size_t - # TODO: Should this just be a c value? - # var refcount: Atomic[c_uint.dtype] - var refcount: c_uint - var free: fn( - opaque: OpaquePointer[MutExternalOrigin], - data: UnsafePointer[c_uchar, origin=MutExternalOrigin], - ) -> NoneType - var opaque: OpaquePointer[MutExternalOrigin] - var flags: c_int - var flags_internal: c_int diff --git a/ash_dynamics/ffmpeg/avutil/channel_layout.mojo b/ash_dynamics/ffmpeg/avutil/channel_layout.mojo deleted file mode 100644 index 2b678c9..0000000 --- a/ash_dynamics/ffmpeg/avutil/channel_layout.mojo +++ /dev/null @@ -1,763 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/channel__layout_8h.html." -from std.ffi import c_int, c_char, c_ulong_long, c_size_t, c_uint, external_call -from ash_dynamics.primitives._clib import C_Union -from std.utils import StaticTuple - -from ash_dynamics.primitives.mojo_compat import ( - reflection_write_to_but_handle_static_tuples, -) -from std.reflection import get_type_name - - -@fieldwise_init("implicit") -struct AVChannel(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - fn ull(self) -> c_ulong_long: - return c_ulong_long(self._value) - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_CHAN_NONE = Self(-1) - - comptime AV_CHAN_FRONT_LEFT = Self(Self.AV_CHAN_NONE._value).inc() - - comptime AV_CHAN_FRONT_RIGHT = Self(Self.AV_CHAN_FRONT_LEFT._value).inc() - - comptime AV_CHAN_FRONT_CENTER = Self(Self.AV_CHAN_FRONT_RIGHT._value).inc() - - comptime AV_CHAN_LOW_FREQUENCY = Self( - Self.AV_CHAN_FRONT_CENTER._value - ).inc() - - comptime AV_CHAN_BACK_LEFT = Self(Self.AV_CHAN_LOW_FREQUENCY._value).inc() - comptime AV_CHAN_BACK_RIGHT = Self(Self.AV_CHAN_BACK_LEFT._value).inc() - comptime AV_CHAN_FRONT_LEFT_OF_CENTER = Self( - Self.AV_CHAN_BACK_RIGHT._value - ).inc() - comptime AV_CHAN_FRONT_RIGHT_OF_CENTER = Self( - Self.AV_CHAN_FRONT_LEFT_OF_CENTER._value - ).inc() - comptime AV_CHAN_BACK_CENTER = Self( - Self.AV_CHAN_FRONT_RIGHT_OF_CENTER._value - ).inc() - comptime AV_CHAN_SIDE_LEFT = Self(Self.AV_CHAN_BACK_CENTER._value).inc() - comptime AV_CHAN_SIDE_RIGHT = Self(Self.AV_CHAN_SIDE_LEFT._value).inc() - comptime AV_CHAN_TOP_CENTER = Self(Self.AV_CHAN_SIDE_RIGHT._value).inc() - comptime AV_CHAN_TOP_FRONT_LEFT = Self(Self.AV_CHAN_TOP_CENTER._value).inc() - comptime AV_CHAN_TOP_FRONT_CENTER = Self( - Self.AV_CHAN_TOP_FRONT_LEFT._value - ).inc() - comptime AV_CHAN_TOP_FRONT_RIGHT = Self( - Self.AV_CHAN_TOP_FRONT_CENTER._value - ).inc() - comptime AV_CHAN_TOP_BACK_LEFT = Self( - Self.AV_CHAN_TOP_FRONT_RIGHT._value - ).inc() - comptime AV_CHAN_TOP_BACK_CENTER = Self( - Self.AV_CHAN_TOP_BACK_LEFT._value - ).inc() - comptime AV_CHAN_TOP_BACK_RIGHT = Self( - Self.AV_CHAN_TOP_BACK_CENTER._value - ).inc() - comptime AV_CHAN_STEREO_LEFT = Self(29) - comptime AV_CHAN_STEREO_RIGHT = Self(Self.AV_CHAN_STEREO_LEFT._value).inc() - comptime AV_CHAN_WIDE_LEFT = Self(Self.AV_CHAN_STEREO_RIGHT._value).inc() - comptime AV_CHAN_WIDE_RIGHT = Self(Self.AV_CHAN_WIDE_LEFT._value).inc() - comptime AV_CHAN_SURROUND_DIRECT_LEFT = Self( - Self.AV_CHAN_WIDE_RIGHT._value - ).inc() - comptime AV_CHAN_SURROUND_DIRECT_RIGHT = Self( - Self.AV_CHAN_SURROUND_DIRECT_LEFT._value - ).inc() - comptime AV_CHAN_LOW_FREQUENCY_2 = Self( - Self.AV_CHAN_SURROUND_DIRECT_RIGHT._value - ).inc() - comptime AV_CHAN_TOP_SIDE_LEFT = Self( - Self.AV_CHAN_LOW_FREQUENCY_2._value - ).inc() - comptime AV_CHAN_TOP_SIDE_RIGHT = Self( - Self.AV_CHAN_TOP_SIDE_LEFT._value - ).inc() - comptime AV_CHAN_BOTTOM_FRONT_CENTER = Self( - Self.AV_CHAN_TOP_SIDE_RIGHT._value - ).inc() - comptime AV_CHAN_BOTTOM_FRONT_LEFT = Self( - Self.AV_CHAN_BOTTOM_FRONT_CENTER._value - ).inc() - comptime AV_CHAN_BOTTOM_FRONT_RIGHT = Self( - Self.AV_CHAN_BOTTOM_FRONT_LEFT._value - ).inc() - comptime AV_CHAN_SIDE_SURROUND_LEFT = Self( - Self.AV_CHAN_BOTTOM_FRONT_RIGHT._value - ).inc() - comptime AV_CHAN_SIDE_SURROUND_RIGHT = Self( - Self.AV_CHAN_SIDE_SURROUND_LEFT._value - ).inc() - comptime AV_CHAN_TOP_SURROUND_LEFT = Self( - Self.AV_CHAN_SIDE_SURROUND_RIGHT._value - ).inc() - comptime AV_CHAN_TOP_SURROUND_RIGHT = Self( - Self.AV_CHAN_TOP_SURROUND_LEFT._value - ).inc() - - comptime AV_CHAN_BINAURAL_LEFT = Self(61) - comptime AV_CHAN_BINAURAL_RIGHT = Self( - Self.AV_CHAN_BINAURAL_LEFT._value - ).inc() - - comptime AV_CHAN_UNUSED = Self(0x200) - - comptime AV_CHAN_UNKNOWN = Self(0x300) - - comptime AV_CHAN_AMBISONIC_BASE = Self(0x400) - comptime AV_CHAN_AMBISONIC_END = Self(0x7FF) - - -@fieldwise_init("implicit") -struct AVChannelOrder(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_CHANNEL_ORDER_UNSPEC = Self(0) - - comptime AV_CHANNEL_ORDER_NATIVE = Self( - Self.AV_CHANNEL_ORDER_UNSPEC._value - ).inc() - - comptime AV_CHANNEL_ORDER_CUSTOM = Self( - Self.AV_CHANNEL_ORDER_NATIVE._value - ).inc() - - comptime AV_CHANNEL_ORDER_AMBISONIC = Self( - Self.AV_CHANNEL_ORDER_CUSTOM._value - ).inc() - - comptime FF_CHANNEL_ORDER_NB = Self( - Self.AV_CHANNEL_ORDER_AMBISONIC._value - ).inc() - - -# A channel layout is a 64-bits integer with a bit set for every channel. -# The number of bits set must be equal to the number of channels. -# The value 0 means that the channel layout is not known. -# @note this data structure is not powerful enough to handle channels -# combinations that have the same channel multiple times, such as -# dual-mono. - -comptime AV_CH_FRONT_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_FRONT_LEFT.ull() -) -comptime AV_CH_FRONT_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_FRONT_RIGHT.ull() -) -comptime AV_CH_FRONT_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_FRONT_CENTER.ull() -) -comptime AV_CH_LOW_FREQUENCY = ( - c_ulong_long(1) << AVChannel.AV_CHAN_LOW_FREQUENCY.ull() -) -comptime AV_CH_BACK_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BACK_LEFT.ull() -) -comptime AV_CH_BACK_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BACK_RIGHT.ull() -) -comptime AV_CH_FRONT_LEFT_OF_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_FRONT_LEFT_OF_CENTER.ull() -) -comptime AV_CH_FRONT_RIGHT_OF_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_FRONT_RIGHT_OF_CENTER.ull() -) -comptime AV_CH_BACK_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BACK_CENTER.ull() -) -comptime AV_CH_SIDE_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SIDE_LEFT.ull() -) -comptime AV_CH_SIDE_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SIDE_RIGHT.ull() -) -comptime AV_CH_TOP_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_CENTER.ull() -) -comptime AV_CH_TOP_FRONT_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_FRONT_LEFT.ull() -) -comptime AV_CH_TOP_FRONT_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_FRONT_CENTER.ull() -) -comptime AV_CH_TOP_FRONT_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_FRONT_RIGHT.ull() -) -comptime AV_CH_TOP_BACK_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_BACK_LEFT.ull() -) -comptime AV_CH_TOP_BACK_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_BACK_CENTER.ull() -) -comptime AV_CH_TOP_BACK_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_BACK_RIGHT.ull() -) -comptime AV_CH_STEREO_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_STEREO_LEFT.ull() -) -comptime AV_CH_STEREO_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_STEREO_RIGHT.ull() -) -comptime AV_CH_WIDE_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_WIDE_LEFT.ull() -) -comptime AV_CH_WIDE_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_WIDE_RIGHT.ull() -) -comptime AV_CH_SURROUND_DIRECT_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SURROUND_DIRECT_LEFT.ull() -) -comptime AV_CH_SURROUND_DIRECT_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SURROUND_DIRECT_RIGHT.ull() -) -comptime AV_CH_LOW_FREQUENCY_2 = ( - c_ulong_long(1) << AVChannel.AV_CHAN_LOW_FREQUENCY_2.ull() -) -comptime AV_CH_TOP_SIDE_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_SIDE_LEFT.ull() -) -comptime AV_CH_TOP_SIDE_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_SIDE_RIGHT.ull() -) -comptime AV_CH_BOTTOM_FRONT_CENTER = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BOTTOM_FRONT_CENTER.ull() -) -comptime AV_CH_BOTTOM_FRONT_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BOTTOM_FRONT_LEFT.ull() -) -comptime AV_CH_BOTTOM_FRONT_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BOTTOM_FRONT_RIGHT.ull() -) -comptime AV_CH_SIDE_SURROUND_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SIDE_SURROUND_LEFT.ull() -) -comptime AV_CH_SIDE_SURROUND_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_SIDE_SURROUND_RIGHT.ull() -) -comptime AV_CH_TOP_SURROUND_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_SURROUND_LEFT.ull() -) -comptime AV_CH_TOP_SURROUND_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_TOP_SURROUND_RIGHT.ull() -) -comptime AV_CH_BINAURAL_LEFT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BINAURAL_LEFT.ull() -) -comptime AV_CH_BINAURAL_RIGHT = ( - c_ulong_long(1) << AVChannel.AV_CHAN_BINAURAL_RIGHT.ull() -) - -# Audio channel layouts -comptime AV_CH_LAYOUT_MONO = (AV_CH_FRONT_CENTER) -comptime AV_CH_LAYOUT_STEREO = (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT) -comptime AV_CH_LAYOUT_2POINT1 = (AV_CH_LAYOUT_STEREO | AV_CH_LOW_FREQUENCY) -comptime AV_CH_LAYOUT_2_1 = (AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER) -comptime AV_CH_LAYOUT_SURROUND = (AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER) -comptime AV_CH_LAYOUT_3POINT1 = (AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY) -comptime AV_CH_LAYOUT_4POINT0 = (AV_CH_LAYOUT_SURROUND | AV_CH_BACK_CENTER) -comptime AV_CH_LAYOUT_4POINT1 = (AV_CH_LAYOUT_4POINT0 | AV_CH_LOW_FREQUENCY) -comptime AV_CH_LAYOUT_2_2 = ( - AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT -) -comptime AV_CH_LAYOUT_QUAD = ( - AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT -) -comptime AV_CH_LAYOUT_5POINT0 = ( - AV_CH_LAYOUT_SURROUND | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT -) -comptime AV_CH_LAYOUT_5POINT1 = (AV_CH_LAYOUT_5POINT0 | AV_CH_LOW_FREQUENCY) -comptime AV_CH_LAYOUT_5POINT0_BACK = ( - AV_CH_LAYOUT_SURROUND | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT -) -comptime AV_CH_LAYOUT_5POINT1_BACK = ( - AV_CH_LAYOUT_5POINT0_BACK | AV_CH_LOW_FREQUENCY -) -comptime AV_CH_LAYOUT_6POINT0 = (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_CENTER) -comptime AV_CH_LAYOUT_6POINT0_FRONT = ( - AV_CH_LAYOUT_2_2 | AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER -) -comptime AV_CH_LAYOUT_HEXAGONAL = ( - AV_CH_LAYOUT_5POINT0_BACK | AV_CH_BACK_CENTER -) -comptime AV_CH_LAYOUT_3POINT1POINT2 = ( - AV_CH_LAYOUT_3POINT1 | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT -) -comptime AV_CH_LAYOUT_6POINT1 = (AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_CENTER) -comptime AV_CH_LAYOUT_6POINT1_BACK = ( - AV_CH_LAYOUT_5POINT1_BACK | AV_CH_BACK_CENTER -) -comptime AV_CH_LAYOUT_6POINT1_FRONT = ( - AV_CH_LAYOUT_6POINT0_FRONT | AV_CH_LOW_FREQUENCY -) -comptime AV_CH_LAYOUT_7POINT0 = ( - AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT -) -comptime AV_CH_LAYOUT_7POINT0_FRONT = ( - AV_CH_LAYOUT_5POINT0 - | AV_CH_FRONT_LEFT_OF_CENTER - | AV_CH_FRONT_RIGHT_OF_CENTER -) -comptime AV_CH_LAYOUT_7POINT1 = ( - AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT -) -comptime AV_CH_LAYOUT_7POINT1_WIDE = ( - AV_CH_LAYOUT_5POINT1 - | AV_CH_FRONT_LEFT_OF_CENTER - | AV_CH_FRONT_RIGHT_OF_CENTER -) -comptime AV_CH_LAYOUT_7POINT1_WIDE_BACK = ( - AV_CH_LAYOUT_5POINT1_BACK - | AV_CH_FRONT_LEFT_OF_CENTER - | AV_CH_FRONT_RIGHT_OF_CENTER -) -comptime AV_CH_LAYOUT_5POINT1POINT2 = ( - AV_CH_LAYOUT_5POINT1 | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT -) -comptime AV_CH_LAYOUT_5POINT1POINT2_BACK = ( - AV_CH_LAYOUT_5POINT1_BACK | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT -) -comptime AV_CH_LAYOUT_OCTAGONAL = ( - AV_CH_LAYOUT_5POINT0 - | AV_CH_BACK_LEFT - | AV_CH_BACK_CENTER - | AV_CH_BACK_RIGHT -) -comptime AV_CH_LAYOUT_CUBE = ( - AV_CH_LAYOUT_QUAD - | AV_CH_TOP_FRONT_LEFT - | AV_CH_TOP_FRONT_RIGHT - | AV_CH_TOP_BACK_LEFT - | AV_CH_TOP_BACK_RIGHT -) -comptime AV_CH_LAYOUT_5POINT1POINT4_BACK = ( - AV_CH_LAYOUT_5POINT1POINT2 | AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT -) -comptime AV_CH_LAYOUT_7POINT1POINT2 = ( - AV_CH_LAYOUT_7POINT1 | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT -) -comptime AV_CH_LAYOUT_7POINT1POINT4_BACK = ( - AV_CH_LAYOUT_7POINT1POINT2 | AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT -) -comptime AV_CH_LAYOUT_7POINT2POINT3 = ( - AV_CH_LAYOUT_7POINT1POINT2 | AV_CH_TOP_BACK_CENTER | AV_CH_LOW_FREQUENCY_2 -) -comptime AV_CH_LAYOUT_9POINT1POINT4_BACK = ( - AV_CH_LAYOUT_7POINT1POINT4_BACK - | AV_CH_FRONT_LEFT_OF_CENTER - | AV_CH_FRONT_RIGHT_OF_CENTER -) -comptime AV_CH_LAYOUT_9POINT1POINT6 = ( - AV_CH_LAYOUT_9POINT1POINT4_BACK | AV_CH_TOP_SIDE_LEFT | AV_CH_TOP_SIDE_RIGHT -) -comptime AV_CH_LAYOUT_HEXADECAGONAL = ( - AV_CH_LAYOUT_OCTAGONAL - | AV_CH_WIDE_LEFT - | AV_CH_WIDE_RIGHT - | AV_CH_TOP_BACK_LEFT - | AV_CH_TOP_BACK_RIGHT - | AV_CH_TOP_BACK_CENTER - | AV_CH_TOP_FRONT_CENTER - | AV_CH_TOP_FRONT_LEFT - | AV_CH_TOP_FRONT_RIGHT -) -comptime AV_CH_LAYOUT_BINAURAL = (AV_CH_BINAURAL_LEFT | AV_CH_BINAURAL_RIGHT) -comptime AV_CH_LAYOUT_STEREO_DOWNMIX = (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT) -comptime AV_CH_LAYOUT_22POINT2 = ( - AV_CH_LAYOUT_9POINT1POINT6 - | AV_CH_BACK_CENTER - | AV_CH_LOW_FREQUENCY_2 - | AV_CH_TOP_FRONT_CENTER - | AV_CH_TOP_CENTER - | AV_CH_TOP_BACK_CENTER - | AV_CH_BOTTOM_FRONT_CENTER - | AV_CH_BOTTOM_FRONT_LEFT - | AV_CH_BOTTOM_FRONT_RIGHT -) - -comptime AV_CH_LAYOUT_7POINT1_TOP_BACK = AV_CH_LAYOUT_5POINT1POINT2_BACK - - -@fieldwise_init -struct AVMatrixEncoding(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_MATRIX_ENCODING_NONE = Self(0) - comptime AV_MATRIX_ENCODING_DOLBY = Self(1) - comptime AV_MATRIX_ENCODING_DPLII = Self(2) - comptime AV_MATRIX_ENCODING_DPLIIX = Self(3) - comptime AV_MATRIX_ENCODING_DPLIIZ = Self(4) - comptime AV_MATRIX_ENCODING_DOLBYEX = Self(5) - comptime AV_MATRIX_ENCODING_DOLBYHEADPHONE = Self(6) - comptime AV_MATRIX_ENCODING_NB = Self(7) - - -@fieldwise_init -struct AVChannelCustom(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVChannelCustom.html." - var id: AVChannel.ENUM_DTYPE - var name: StaticTuple[c_char, 16] - var opaque: OpaquePointer[MutExternalOrigin] - - -@fieldwise_init -struct AVChannelLayout(ImplicitlyCopyable, Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVChannelLayout.html." - var order: AVChannelOrder.ENUM_DTYPE - var nb_channels: c_int - - var u: C_Union[ - c_ulong_long, - # Mask of channels present in this layout. - UnsafePointer[AVChannelCustom, ImmutExternalOrigin] - # Details about which channels are present in this layout. - ] - - var opaque: OpaquePointer[MutExternalOrigin] - - fn write_to(self, mut writer: Some[Writer]): - @always_inline - fn call_write_to[ - FieldType: Writable - ](field: FieldType, mut writer: type_of(writer)): - field.write_to(writer) - - reflection_write_to_but_handle_static_tuples[f=call_write_to]( - self, writer - ) - - -fn AV_CHANNEL_LAYOUT_MASK(nb: c_int, m: c_ulong_long) -> AVChannelLayout: - return AVChannelLayout( - order=AVChannelOrder.AV_CHANNEL_ORDER_NATIVE._value, - nb_channels=nb, - u=m, - opaque=OpaquePointer[MutExternalOrigin](), - ) - - -# Common pre-defined channel layouts -comptime AV_CHANNEL_LAYOUT_MONO = AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) -comptime AV_CHANNEL_LAYOUT_STEREO = AV_CHANNEL_LAYOUT_MASK( - 2, AV_CH_LAYOUT_STEREO -) -comptime AV_CHANNEL_LAYOUT_2POINT1 = AV_CHANNEL_LAYOUT_MASK( - 3, AV_CH_LAYOUT_2POINT1 -) -comptime AV_CHANNEL_LAYOUT_2_1 = AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) -comptime AV_CHANNEL_LAYOUT_SURROUND = AV_CHANNEL_LAYOUT_MASK( - 3, AV_CH_LAYOUT_SURROUND -) -comptime AV_CHANNEL_LAYOUT_3POINT1 = AV_CHANNEL_LAYOUT_MASK( - 4, AV_CH_LAYOUT_3POINT1 -) -comptime AV_CHANNEL_LAYOUT_4POINT0 = AV_CHANNEL_LAYOUT_MASK( - 4, AV_CH_LAYOUT_4POINT0 -) -comptime AV_CHANNEL_LAYOUT_4POINT1 = AV_CHANNEL_LAYOUT_MASK( - 5, AV_CH_LAYOUT_4POINT1 -) -comptime AV_CHANNEL_LAYOUT_2_2 = AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) -comptime AV_CHANNEL_LAYOUT_QUAD = AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) -comptime AV_CHANNEL_LAYOUT_5POINT0 = AV_CHANNEL_LAYOUT_MASK( - 5, AV_CH_LAYOUT_5POINT0 -) -comptime AV_CHANNEL_LAYOUT_5POINT1 = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_5POINT1 -) -comptime AV_CHANNEL_LAYOUT_5POINT0_BACK = AV_CHANNEL_LAYOUT_MASK( - 5, AV_CH_LAYOUT_5POINT0_BACK -) -comptime AV_CHANNEL_LAYOUT_5POINT1_BACK = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_5POINT1_BACK -) -comptime AV_CHANNEL_LAYOUT_6POINT0 = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_6POINT0 -) -comptime AV_CHANNEL_LAYOUT_6POINT0_FRONT = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_6POINT0_FRONT -) -comptime AV_CHANNEL_LAYOUT_3POINT1POINT2 = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_3POINT1POINT2 -) -comptime AV_CHANNEL_LAYOUT_HEXAGONAL = AV_CHANNEL_LAYOUT_MASK( - 6, AV_CH_LAYOUT_HEXAGONAL -) -comptime AV_CHANNEL_LAYOUT_6POINT1 = AV_CHANNEL_LAYOUT_MASK( - 7, AV_CH_LAYOUT_6POINT1 -) -comptime AV_CHANNEL_LAYOUT_6POINT1_BACK = AV_CHANNEL_LAYOUT_MASK( - 7, AV_CH_LAYOUT_6POINT1_BACK -) -comptime AV_CHANNEL_LAYOUT_6POINT1_FRONT = AV_CHANNEL_LAYOUT_MASK( - 7, AV_CH_LAYOUT_6POINT1_FRONT -) -comptime AV_CHANNEL_LAYOUT_7POINT0 = AV_CHANNEL_LAYOUT_MASK( - 7, AV_CH_LAYOUT_7POINT0 -) -comptime AV_CHANNEL_LAYOUT_7POINT0_FRONT = AV_CHANNEL_LAYOUT_MASK( - 7, AV_CH_LAYOUT_7POINT0_FRONT -) -comptime AV_CHANNEL_LAYOUT_7POINT1 = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_7POINT1 -) -comptime AV_CHANNEL_LAYOUT_7POINT1_WIDE = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_7POINT1_WIDE -) -comptime AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_7POINT1_WIDE_BACK -) -comptime AV_CHANNEL_LAYOUT_5POINT1POINT2 = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_5POINT1POINT2 -) -comptime AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_5POINT1POINT2_BACK -) -comptime AV_CHANNEL_LAYOUT_OCTAGONAL = AV_CHANNEL_LAYOUT_MASK( - 8, AV_CH_LAYOUT_OCTAGONAL -) -comptime AV_CHANNEL_LAYOUT_CUBE = AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) -comptime AV_CHANNEL_LAYOUT_5POINT1POINT4_BACK = AV_CHANNEL_LAYOUT_MASK( - 10, AV_CH_LAYOUT_5POINT1POINT4_BACK -) -comptime AV_CHANNEL_LAYOUT_7POINT1POINT2 = AV_CHANNEL_LAYOUT_MASK( - 10, AV_CH_LAYOUT_7POINT1POINT2 -) -comptime AV_CHANNEL_LAYOUT_7POINT1POINT4_BACK = AV_CHANNEL_LAYOUT_MASK( - 12, AV_CH_LAYOUT_7POINT1POINT4_BACK -) -comptime AV_CHANNEL_LAYOUT_7POINT2POINT3 = AV_CHANNEL_LAYOUT_MASK( - 12, AV_CH_LAYOUT_7POINT2POINT3 -) -comptime AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK = AV_CHANNEL_LAYOUT_MASK( - 14, AV_CH_LAYOUT_9POINT1POINT4_BACK -) -comptime AV_CHANNEL_LAYOUT_9POINT1POINT6 = AV_CHANNEL_LAYOUT_MASK( - 16, AV_CH_LAYOUT_9POINT1POINT6 -) -comptime AV_CHANNEL_LAYOUT_HEXADECAGONAL = AV_CHANNEL_LAYOUT_MASK( - 16, AV_CH_LAYOUT_HEXADECAGONAL -) -comptime AV_CHANNEL_LAYOUT_BINAURAL = AV_CHANNEL_LAYOUT_MASK( - 2, AV_CH_LAYOUT_BINAURAL -) -comptime AV_CHANNEL_LAYOUT_STEREO_DOWNMIX = AV_CHANNEL_LAYOUT_MASK( - 2, AV_CH_LAYOUT_STEREO_DOWNMIX -) -comptime AV_CHANNEL_LAYOUT_22POINT2 = AV_CHANNEL_LAYOUT_MASK( - 24, AV_CH_LAYOUT_22POINT2 -) - -comptime AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK = AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK - - -fn AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER() -> AVChannelLayout: - return AVChannelLayout( - order=AVChannelOrder.AV_CHANNEL_ORDER_AMBISONIC._value, - nb_channels=4, - u=0, - opaque=OpaquePointer[MutExternalOrigin](), - ) - - -fn av_channel_name( - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_size_t, - channel: AVChannel.ENUM_DTYPE, -) -> c_int: - return external_call["av_channel_name", c_int](buf, buf_size, channel) - - -# bprint variant of av_channel_name(). -# @note the string will be appended to the bprint buffer. -# void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id); - - -fn av_channel_description( - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_size_t, - channel: AVChannel.ENUM_DTYPE, -) -> c_int: - return external_call["av_channel_description", c_int]( - buf, buf_size, channel - ) - - -# bprint variant of av_channel_description(). -# @note the string will be appended to the bprint buffer. -# void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id); - - -fn av_channel_from_string( - str: UnsafePointer[c_char, ImmutExternalOrigin] -) -> AVChannel.ENUM_DTYPE: - return external_call["av_channel_from_string", AVChannel.ENUM_DTYPE](str) - - -fn av_channel_layout_custom_init( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin], - nb_channels: c_int, -) -> c_int: - return external_call["av_channel_layout_custom_init", c_int]( - channel_layout, nb_channels - ) - - -fn av_channel_layout_from_mask( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin], - mask: c_ulong_long, -) -> c_int: - return external_call["av_channel_layout_from_mask", c_int]( - channel_layout, mask - ) - - -fn av_channel_layout_from_string( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> c_int: - return external_call["av_channel_layout_from_string", c_int]( - channel_layout, str - ) - - -fn av_channel_layout_default( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin], - nb_channels: c_int, -): - external_call["av_channel_layout_default", NoneType]( - channel_layout, nb_channels - ) - - -fn av_channel_layout_standard( - opaque: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[AVChannelLayout, ImmutExternalOrigin]: - return external_call[ - "av_channel_layout_standard", - UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - ](opaque) - - -fn av_channel_layout_uninit( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin] -): - external_call["av_channel_layout_uninit", NoneType](channel_layout) - - -fn av_channel_layout_copy( - dst: UnsafePointer[AVChannelLayout, MutExternalOrigin], - src: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], -) -> c_int: - return external_call["av_channel_layout_copy", c_int](dst, src) - - -fn av_channel_layout_describe( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - buf: UnsafePointer[c_char, MutExternalOrigin], - buf_size: c_size_t, -) -> c_int: - return external_call["av_channel_layout_describe", c_int]( - channel_layout, buf, buf_size - ) - - -# bprint variant of av_channel_layout_describe(). -# -# @note the string will be appended to the bprint buffer. -# @return 0 on success, or a negative AVERROR value on failure. -# int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, -# struct AVBPrint *bp); - - -fn av_channel_layout_channel_from_index( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - idx: c_uint, -) -> AVChannel.ENUM_DTYPE: - return external_call[ - "av_channel_layout_channel_from_index", AVChannel.ENUM_DTYPE - ](channel_layout, idx) - - -fn av_channel_layout_index_from_channel( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - channel: AVChannel.ENUM_DTYPE, -) -> c_int: - return external_call["av_channel_layout_index_from_channel", c_int]( - channel_layout, channel - ) - - -fn av_channel_layout_index_from_string( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> c_int: - return external_call["av_channel_layout_index_from_string", c_int]( - channel_layout, str - ) - - -fn av_channel_layout_channel_from_string( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - str: UnsafePointer[c_char, ImmutExternalOrigin], -) -> AVChannel.ENUM_DTYPE: - return external_call[ - "av_channel_layout_channel_from_string", AVChannel.ENUM_DTYPE - ](channel_layout, str) - - -fn av_channel_layout_subset( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - mask: c_ulong_long, -) -> c_ulong_long: - return external_call["av_channel_layout_subset", c_ulong_long]( - channel_layout, mask - ) - - -fn av_channel_layout_check( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin] -) -> c_int: - return external_call["av_channel_layout_check", c_int](channel_layout) - - -fn av_channel_layout_compare( - chl: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - chl1: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], -) -> c_int: - return external_call["av_channel_layout_compare", c_int](chl, chl1) - - -fn av_channel_layout_ambisonic_order( - channel_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin] -) -> c_int: - return external_call["av_channel_layout_ambisonic_order", c_int]( - channel_layout - ) - - -comptime AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS = (1 << 0) - -comptime AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL = (1 << 1) - - -fn av_channel_layout_retype( - channel_layout: UnsafePointer[AVChannelLayout, MutExternalOrigin], - order: AVChannelOrder.ENUM_DTYPE, - flags: c_int, -) -> c_int: - return external_call["av_channel_layout_retype", c_int]( - channel_layout, order, flags - ) diff --git a/ash_dynamics/ffmpeg/avutil/dict.mojo b/ash_dynamics/ffmpeg/avutil/dict.mojo deleted file mode 100644 index 94f1aa6..0000000 --- a/ash_dynamics/ffmpeg/avutil/dict.mojo +++ /dev/null @@ -1,3 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/dict_8h.html." -comptime AVDictionary = OpaquePointer[MutExternalOrigin] -"An opaque pointer is shown in `avutil/dict.h`." diff --git a/ash_dynamics/ffmpeg/avutil/error.mojo b/ash_dynamics/ffmpeg/avutil/error.mojo deleted file mode 100644 index d96597e..0000000 --- a/ash_dynamics/ffmpeg/avutil/error.mojo +++ /dev/null @@ -1,110 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/error_8h.html." -from std.ffi import c_int, c_size_t, external_call -from ash_dynamics.ffmpeg.avutil.macros import MKTAG -from std.utils import Variant -from std.os import abort - - -# NOTE: There is a macro conditional: EDOM > 0. Not sure if we need to do this. -fn AVERROR(err: c_int) -> c_int: - return -err - - -comptime IntOrStr = Variant[Int, c_int, String, StaticString] - - -@always_inline -fn get_int(a: IntOrStr) -> Int: - if a.isa[Int](): - return a[Int] - elif a.isa[c_int](): - return Int(a[c_int]) - elif a.isa[String](): - return ord(a[String]) - else: - return ord(a[StaticString]) - - -@always_inline -fn FFERRTAG(a: IntOrStr, b: IntOrStr, c: IntOrStr, d: IntOrStr) -> Int: - return -MKTAG(get_int(a), get_int(b), get_int(c), get_int(d)) - - -comptime AVERROR_BSF_NOT_FOUND = FFERRTAG(0xF8, "B", "S", "F") - -comptime AVERROR_BUG = FFERRTAG("B", "U", "G", "!") - -comptime AVERROR_BUFFER_TOO_SMALL = FFERRTAG("B", "U", "F", "S") - -comptime AVERROR_DECODER_NOT_FOUND = FFERRTAG(0xF8, "D", "E", "C") - -comptime AVERROR_DEMUXER_NOT_FOUND = FFERRTAG(0xF8, "D", "E", "M") - -comptime AVERROR_ENCODER_NOT_FOUND = FFERRTAG(0xF8, "E", "N", "C") - -comptime AVERROR_EOF = FFERRTAG("E", "O", "F", " ") - -comptime AVERROR_EXIT = FFERRTAG("E", "X", "I", "T") - -comptime AVERROR_EXTERNAL = FFERRTAG("E", "X", "T", " ") - -comptime AVERROR_FILTER_NOT_FOUND = FFERRTAG(0xF8, "F", "I", "L") - -comptime AVERROR_INVALIDDATA = FFERRTAG("I", "N", "D", "A") - -comptime AVERROR_MUXER_NOT_FOUND = FFERRTAG(0xF8, "M", "U", "X") - -comptime AVERROR_OPTION_NOT_FOUND = FFERRTAG(0xF8, "O", "P", "T") - -comptime AVERROR_PATCHWELCOME = FFERRTAG("P", "A", "W", "E") - -comptime AVERROR_PROTOCOL_NOT_FOUND = FFERRTAG(0xF8, "P", "R", "O") - -comptime AVERROR_STREAM_NOT_FOUND = FFERRTAG(0xF8, "S", "T", "R") - -comptime AVERROR_BUG2 = FFERRTAG("B", "U", "G", " ") - -comptime AVERROR_UNKNOWN = FFERRTAG("U", "N", "K", "N") - -comptime AVERROR_EXPERIMENTAL = -0x2BB2AFA8 - -comptime AVERROR_INPUT_CHANGED = -0x636E6701 - -comptime AVERROR_OUTPUT_CHANGED = -0x636E6702 - -# HTTP and RTSP error -comptime AVERROR_HTTP_BAD_REQUEST = FFERRTAG(0xF8, "4", "0", "0") - -comptime AVERROR_HTTP_UNAUTHORIZED = FFERRTAG(0xF8, "4", "0", "1") - -comptime AVERROR_HTTP_FORBIDDEN = FFERRTAG(0xF8, "4", "0", "3") - -comptime AVERROR_HTTP_NOT_FOUND = FFERRTAG(0xF8, "4", "0", "4") - -comptime AVERROR_HTTP_TOO_MANY_REQUESTS = FFERRTAG(0xF8, "4", "2", "9") - -comptime AVERROR_HTTP_OTHER_4XX = FFERRTAG(0xF8, "4", "X", "X") - -comptime AVERROR_HTTP_SERVER_ERROR = FFERRTAG(0xF8, "5", "X", "X") - -comptime AV_ERROR_MAX_STRING_SIZE = 64 - - -fn av_strerror( - err: c_int, - errbuf: UnsafePointer[c_char, MutAnyOrigin], - errbuf_size: c_size_t, -) -> c_int: - return external_call["av_strerror", c_int](err, errbuf, errbuf_size) - - -fn av_err2str(err: c_int) -> String: - var s = alloc[c_char](AV_ERROR_MAX_STRING_SIZE) - var ret = av_strerror( - err, - s, - AV_ERROR_MAX_STRING_SIZE, - ) - if ret < 0: - abort("Failed to get error string for error code: {}".format(err)) - return String(unsafe_from_utf8_ptr=s) diff --git a/ash_dynamics/ffmpeg/avutil/frame.mojo b/ash_dynamics/ffmpeg/avutil/frame.mojo deleted file mode 100644 index a30fec2..0000000 --- a/ash_dynamics/ffmpeg/avutil/frame.mojo +++ /dev/null @@ -1,571 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/frame_8h.html." - -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.avutil import AVPictureType -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avutil.pixfmt import ( - AVPixelFormat, - AVColorRange, - AVColorPrimaries, - AVColorTransferCharacteristic, - AVColorSpace, - AVChromaLocation, -) -from std.ffi import ( - c_uchar, - c_int, - c_long_long, - c_ulong_long, - c_size_t, - c_uint, - c_char, - external_call, -) -from std.utils import StaticTuple -from std.memory import memset_zero - - -# Until https://github.com/modular/modular/pull/5715 is merged, we need to -# extend the unsafe_ptr function to StaticTuple. -__extension StaticTuple: - @always_inline("nodebug") - fn unsafe_ptr( - ref self, - ) -> UnsafePointer[Self.element_type, origin_of(self)]: - return ( - UnsafePointer(to=self._mlir_value) - .bitcast[Self.element_type]() - .unsafe_origin_cast[origin_of(self)]() - ) - - -@fieldwise_init("implicit") -struct AVFrameSideDataType(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - comptime AV_FRAME_DATA_PANSCAN = Self(0) - - comptime AV_FRAME_DATA_A53_CC = Self(1) - comptime AV_FRAME_DATA_STEREO3D = Self(2) - comptime AV_FRAME_DATA_MATRIXENCODING = Self(3) - comptime AV_FRAME_DATA_DOWNMIX_INFO = Self(4) - comptime AV_FRAME_DATA_REPLAYGAIN = Self(5) - comptime AV_FRAME_DATA_DISPLAYMATRIX = Self(6) - comptime AV_FRAME_DATA_AFD = Self(7) - comptime AV_FRAME_DATA_MOTION_VECTORS = Self(8) - comptime AV_FRAME_DATA_SKIP_SAMPLES = Self(9) - comptime AV_FRAME_DATA_AUDIO_SERVICE_TYPE = Self(10) - comptime AV_FRAME_DATA_MASTERING_DISPLAY_METADATA = Self(11) - comptime AV_FRAME_DATA_GOP_TIMECODE = Self(12) - - comptime AV_FRAME_DATA_SPHERICAL = Self(13) - - comptime AV_FRAME_DATA_CONTENT_LIGHT_LEVEL = Self(14) - - comptime AV_FRAME_DATA_ICC_PROFILE = Self(15) - - comptime AV_FRAME_DATA_S12M_TIMECODE = Self(16) - - comptime AV_FRAME_DATA_DYNAMIC_HDR_PLUS = Self(17) - - comptime AV_FRAME_DATA_REGIONS_OF_INTEREST = Self(18) - - comptime AV_FRAME_DATA_VIDEO_ENC_PARAMS = Self(19) - - comptime AV_FRAME_DATA_SEI_UNREGISTERED = Self(20) - - comptime AV_FRAME_DATA_FILM_GRAIN_PARAMS = Self(21) - - comptime AV_FRAME_DATA_DETECTION_BBOXES = Self(22) - - comptime AV_FRAME_DATA_DOVI_RPU_BUFFER = Self(23) - - comptime AV_FRAME_DATA_DOVI_METADATA = Self(24) - - comptime AV_FRAME_DATA_DYNAMIC_HDR_VIVID = Self(25) - - comptime AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT = Self(26) - - comptime AV_FRAME_DATA_VIDEO_HINT = Self(27) - - comptime AV_FRAME_DATA_LCEVC = Self(28) - - comptime AV_FRAME_DATA_VIEW_ID = Self(29) - - comptime AV_FRAME_DATA_3D_REFERENCE_DISPLAYS = Self(30) - - -@fieldwise_init -struct AVActiveFormatDescription(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_AFD_SAME = Self(8) - comptime AV_AFD_4_3 = Self(9) - comptime AV_AFD_16_9 = Self(10) - comptime AV_AFD_14_9 = Self(11) - comptime AV_AFD_4_3_SP_14_9 = Self(13) - comptime AV_AFD_16_9_SP_14_9 = Self(14) - comptime AV_AFD_SP_4_3 = Self(15) - - -struct AVFrameSideData(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVFrameSideData.html." - var type: AVFrameSideDataType.ENUM_DTYPE - var data: UnsafePointer[c_uchar, MutExternalOrigin] - var size: c_size_t - var metadata: UnsafePointer[AVDictionary, MutExternalOrigin] - var buf: UnsafePointer[AVBufferRef, MutExternalOrigin] - - @staticmethod - fn alloc_triple_ptr() -> ( - UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], - MutExternalOrigin, - ], - MutExternalOrigin, - ] - ): - var sd_ptr = UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ]() - var sd_ptr_ptr = alloc[type_of(sd_ptr)](1) - memset_zero(sd_ptr_ptr, 1) - return sd_ptr_ptr - - -@fieldwise_init -struct AVSideDataProps(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AV_SIDE_DATA_PROP_GLOBAL = Self(1 << 0) - comptime AV_SIDE_DATA_PROP_MULTI = Self(1 << 1) - comptime AV_SIDE_DATA_PROP_SIZE_DEPENDENT = Self(1 << 2) - comptime AV_SIDE_DATA_PROP_COLOR_DEPENDENT = Self(1 << 3) - comptime AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT = Self(1 << 4) - - -@fieldwise_init -struct AVSideDataDescriptor(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVSideDataDescriptor.html." - var name: UnsafePointer[c_char, MutExternalOrigin] - var props: AVSideDataProps.ENUM_DTYPE - - -@fieldwise_init -struct AVRegionOfInterest(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVRegionOfInterest.html." - var self_size: c_uint - var top: c_int - var bottom: c_int - var left: c_int - var right: c_int - - var qoffset: AVRational - - -@fieldwise_init -struct AVFrame(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVFrame.html." - comptime AV_NUM_DATA_POINTERS = Int(8) - - var data: StaticTuple[ - UnsafePointer[c_uchar, MutExternalOrigin], Self.AV_NUM_DATA_POINTERS - ] - var linesize: StaticTuple[c_int, Self.AV_NUM_DATA_POINTERS] - - var extended_data: UnsafePointer[ - UnsafePointer[c_uchar, origin=MutExternalOrigin], - origin=MutExternalOrigin, - ] - - var width: c_int - var height: c_int - - var nb_samples: c_int - - var format: c_int - - var pict_type: AVPictureType.ENUM_DTYPE - - var sample_aspect_ratio: AVRational - - var pts: c_long_long - - var pkt_dts: c_long_long - - var time_base: AVRational - - var quality: c_int - - var opaque: OpaquePointer[MutExternalOrigin] - - var repeat_pict: c_int - - var sample_rate: c_int - - var buf: StaticTuple[ - UnsafePointer[AVBufferRef, origin=MutExternalOrigin], - Self.AV_NUM_DATA_POINTERS, - ] - - var extended_buf: UnsafePointer[ - UnsafePointer[AVBufferRef, origin=MutExternalOrigin], - origin=MutExternalOrigin, - ] - - var nb_extended_buf: c_int - - var side_data: UnsafePointer[ - UnsafePointer[AVFrameSideData, origin=MutExternalOrigin], - origin=MutExternalOrigin, - ] - var nb_side_data: c_int - - comptime AV_FRAME_FLAG_CORRUPT = Int(1 << 0) - comptime AV_FRAME_FLAG_KEY = Int(1 << 1) - comptime AV_FRAME_FLAG_DISCARD = Int(1 << 2) - comptime AV_FRAME_FLAG_INTERLACED = Int(1 << 3) - comptime AV_FRAME_FLAG_TOP_FIELD_FIRST = Int(1 << 4) - comptime AV_FRAME_FLAG_LOSSLESS = Int(1 << 5) - - var flags: c_int - - var color_range: AVColorRange.ENUM_DTYPE - - var color_primaries: AVColorPrimaries.ENUM_DTYPE - - var color_transfer_characteristic: AVColorTransferCharacteristic.ENUM_DTYPE - - var colorspace: AVColorSpace.ENUM_DTYPE - - var chroma_location: AVChromaLocation.ENUM_DTYPE - - var best_effort_timestamp: c_long_long - - var metadata: AVDictionary - - var decode_error_flags: c_int - - comptime FF_DECODE_ERROR_INVALID_BITSTREAM = Int(1) - comptime FF_DECODE_ERROR_MISSING_REFERENCE = Int(2) - comptime FF_DECODE_ERROR_CONCEALMENT_ACTIVE = Int(4) - comptime FF_DECODE_ERROR_DECODE_SLICES = Int(8) - - var hw_frames_ctx: UnsafePointer[AVBufferRef, origin=MutExternalOrigin] - - var opaque_ref: UnsafePointer[AVBufferRef, origin=MutExternalOrigin] - - var crop_top: c_size_t - - var crop_bottom: c_size_t - - var crop_left: c_size_t - - var crop_right: c_size_t - - var private_ref: OpaquePointer[MutExternalOrigin] - - var ch_layout: AVChannelLayout - - var duration: c_long_long - - -fn av_frame_alloc() -> UnsafePointer[AVFrame, MutExternalOrigin]: - return external_call[ - "av_frame_alloc", UnsafePointer[AVFrame, MutExternalOrigin] - ]() - - -fn av_frame_free( - var frame: UnsafePointer[ - UnsafePointer[AVFrame, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["av_frame_free", NoneType](frame) - - -fn av_frame_free(var frame: UnsafePointer[AVFrame, MutExternalOrigin]): - var frame_ptr = alloc[type_of(frame)](1) - frame_ptr[] = frame - external_call["av_frame_free", NoneType](frame_ptr) - frame_ptr.free() - - -fn av_frame_ref( - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["av_frame_ref", c_int](dst, src) - - -fn av_frame_replace( - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["av_frame_replace", c_int](dst, src) - - -fn av_frame_clone( - src: UnsafePointer[AVFrame, ImmutExternalOrigin] -) -> UnsafePointer[AVFrame, MutExternalOrigin]: - return external_call[ - "av_frame_clone", UnsafePointer[AVFrame, MutExternalOrigin] - ](src) - - -fn av_frame_unref(frame: UnsafePointer[AVFrame, MutExternalOrigin]): - external_call["av_frame_unref", NoneType](frame) - - -fn av_frame_move_ref( - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, MutExternalOrigin], -): - external_call["av_frame_move_ref", NoneType](dst, src) - - -fn av_frame_get_buffer( - frame: UnsafePointer[AVFrame, MutExternalOrigin], align: c_int -) -> c_int: - return external_call["av_frame_get_buffer", c_int](frame, align) - - -fn av_frame_is_writable( - frame: UnsafePointer[AVFrame, MutExternalOrigin] -) -> c_int: - return external_call["av_frame_is_writable", c_int](frame) - - -fn av_frame_make_writable( - frame: UnsafePointer[AVFrame, MutExternalOrigin] -) -> c_int: - return external_call["av_frame_make_writable", c_int](frame) - - -fn av_frame_copy( - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["av_frame_copy", c_int](dst, src) - - -fn av_frame_copy_props( - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["av_frame_copy_props", c_int](dst, src) - - -fn av_frame_get_plane_buffer( - frame: UnsafePointer[AVFrame, ImmutExternalOrigin], plane: c_int -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return external_call[ - "av_frame_get_plane_buffer", - UnsafePointer[AVBufferRef, MutExternalOrigin], - ](frame, plane) - - -fn av_frame_new_side_data( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, - size: c_size_t, -) -> UnsafePointer[AVFrameSideData, MutExternalOrigin]: - return external_call[ - "av_frame_new_side_data", - UnsafePointer[AVFrameSideData, MutExternalOrigin], - ](frame, type, size) - - -fn av_frame_new_side_data_from_buf( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, - buf: UnsafePointer[AVBufferRef, MutExternalOrigin], -) -> UnsafePointer[AVFrameSideData, MutExternalOrigin]: - return external_call[ - "av_frame_new_side_data_from_buf", - UnsafePointer[AVFrameSideData, MutExternalOrigin], - ](frame, type, buf) - - -fn av_frame_get_side_data( - frame: UnsafePointer[AVFrame, ImmutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, -) -> UnsafePointer[AVFrameSideData, MutExternalOrigin]: - return external_call[ - "av_frame_get_side_data", - UnsafePointer[AVFrameSideData, MutExternalOrigin], - ](frame, type) - - -fn av_frame_remove_side_data( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, -): - external_call["av_frame_remove_side_data", NoneType](frame, type) - - -######################################################## -# === Flags for frame cropping === -######################################################## - -comptime AV_FRAME_CROP_UNALIGNED = Int(1 << 0) - - -fn av_frame_apply_cropping( - frame: UnsafePointer[AVFrame, MutExternalOrigin], flags: c_int -) -> c_int: - return external_call["av_frame_apply_cropping", c_int](frame, flags) - - -fn av_frame_side_data_name( - type: AVFrameSideDataType.ENUM_DTYPE, -) -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "av_frame_side_data_name", UnsafePointer[c_char, ImmutExternalOrigin] - ](type) - - -fn av_frame_side_data_desc( - type: AVFrameSideDataType.ENUM_DTYPE, -) -> UnsafePointer[AVSideDataDescriptor, ImmutExternalOrigin]: - return external_call[ - "av_frame_side_data_desc", - UnsafePointer[AVSideDataDescriptor, ImmutExternalOrigin], - ](type) - - -fn av_frame_side_data_free( - sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], -): - external_call["av_frame_side_data_free", NoneType](sd, nb_sd) - - -comptime AV_FRAME_SIDE_DATA_FLAG_UNIQUE = Int(1 << 0) - - -comptime AV_FRAME_SIDE_DATA_FLAG_REPLACE = Int(1 << 1) - - -comptime AV_FRAME_SIDE_DATA_FLAG_NEW_REF = Int(1 << 2) - - -fn av_frame_side_data_new( - sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, - size: c_size_t, - flags: c_uint, -) -> UnsafePointer[AVFrameSideData, MutExternalOrigin]: - return external_call[ - "av_frame_side_data_new", - UnsafePointer[AVFrameSideData, MutExternalOrigin], - ](sd, nb_sd, type, size, flags) - - -fn av_frame_side_data_add( - sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, - buf: UnsafePointer[ - UnsafePointer[AVBufferRef, MutExternalOrigin], MutExternalOrigin - ], - flags: c_uint, -) -> UnsafePointer[AVFrameSideData, MutExternalOrigin]: - return external_call[ - "av_frame_side_data_add", - UnsafePointer[AVFrameSideData, MutExternalOrigin], - ](sd, nb_sd, type, buf, flags) - - -fn av_frame_side_data_clone( - sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], - src: UnsafePointer[AVFrameSideData, ImmutExternalOrigin], - flags: c_uint, -) -> c_int: - return external_call["av_frame_side_data_clone", c_int]( - sd, nb_sd, src, flags - ) - - -# TODO: This is an inline function and probably shouldn't be a -# "external function". This needs to be handled in the dlhandle. -fn av_frame_side_data_get_c( - sd: UnsafePointer[ - UnsafePointer[AVFrameSideData, ImmutExternalOrigin], ImmutExternalOrigin - ], - nb_sd: c_int, - type: AVFrameSideDataType.ENUM_DTYPE, -) -> UnsafePointer[AVFrameSideData, ImmutExternalOrigin]: - return external_call[ - "av_frame_side_data_get_c", - UnsafePointer[AVFrameSideData, ImmutExternalOrigin], - ](sd, nb_sd, type) - - -# TODO: This is an inline function and probably shouldn't be a -# "external function". This needs to be handled in the dlhandle. -# comptime av_frame_side_data_get = ExternalFunction[ -# "av_frame_side_data_get", -# fn ( -# sd: UnsafePointer[AVFrameSideData, ImmutExternalOrigin], -# nb_sd: c_int, -# type: AVFrameSideDataType.ENUM_DTYPE, -# ) -> UnsafePointer[AVFrameSideData, ImmutExternalOrigin], -# ] - - -fn av_frame_side_data_remove( - var sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], - type: AVFrameSideDataType.ENUM_DTYPE, -): - external_call["av_frame_side_data_remove", NoneType](sd, nb_sd, type) - - -fn av_frame_side_data_remove_by_props( - sd: UnsafePointer[ - UnsafePointer[ - UnsafePointer[AVFrameSideData, MutExternalOrigin], MutExternalOrigin - ], - MutExternalOrigin, - ], - nb_sd: UnsafePointer[c_int, MutExternalOrigin], - props: c_int, -): - external_call["av_frame_side_data_remove_by_props", NoneType]( - sd, nb_sd, props - ) diff --git a/ash_dynamics/ffmpeg/avutil/hwcontext.mojo b/ash_dynamics/ffmpeg/avutil/hwcontext.mojo deleted file mode 100644 index 327bb02..0000000 --- a/ash_dynamics/ffmpeg/avutil/hwcontext.mojo +++ /dev/null @@ -1,70 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/hwcontext_8h.html." -from std.ffi import c_char, c_int, c_uchar -from ash_dynamics.primitives._clib import ExternalFunction - -from std.reflection import get_type_name -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef, AVBufferPool -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout - - -@fieldwise_init -struct AVHWDeviceType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_HWDEVICE_TYPE_NONE = c_int(0) - comptime AV_HWDEVICE_TYPE_VDPAU = c_int(1) - comptime AV_HWDEVICE_TYPE_CUDA = c_int(2) - comptime AV_HWDEVICE_TYPE_VAAPI = c_int(3) - comptime AV_HWDEVICE_TYPE_DXVA2 = c_int(4) - comptime AV_HWDEVICE_TYPE_QSV = c_int(5) - comptime AV_HWDEVICE_TYPE_VIDEOTOOLBOX = c_int(6) - comptime AV_HWDEVICE_TYPE_D3D11VA = c_int(7) - comptime AV_HWDEVICE_TYPE_DRM = c_int(8) - comptime AV_HWDEVICE_TYPE_OPENCL = c_int(9) - comptime AV_HWDEVICE_TYPE_MEDIACODEC = c_int(10) - comptime AV_HWDEVICE_TYPE_VULKAN = c_int(11) - comptime AV_HWDEVICE_TYPE_D3D12VA = c_int(12) - comptime AV_HWDEVICE_TYPE_AMF = c_int(13) - comptime AV_HWDEVICE_TYPE_OHCODEC = c_int(14) - - -@fieldwise_init -struct AVHWDeviceContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVHWDeviceContext.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var type: AVHWDeviceType.ENUM_DTYPE - var hwctx: OpaquePointer[MutExternalOrigin] - var free: UnsafePointer[ - ExternalFunction[ - "free", - fn(ctx: UnsafePointer[AVHWDeviceContext, MutExternalOrigin]), - ], - ImmutExternalOrigin, - ] - var user_opaque: OpaquePointer[MutExternalOrigin] - - -@fieldwise_init -struct AVHWFramesContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVHWFramesContext.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var device_ref: UnsafePointer[AVBufferRef, MutExternalOrigin] - var device_ctx: UnsafePointer[AVHWDeviceContext, MutExternalOrigin] - var hwctx: OpaquePointer[MutExternalOrigin] - var free: UnsafePointer[ - ExternalFunction[ - "free", - fn(ctx: UnsafePointer[AVHWFramesContext, MutExternalOrigin]), - ], - ImmutExternalOrigin, - ] - var user_opaque: OpaquePointer[MutExternalOrigin] - var pool: UnsafePointer[AVBufferPool, MutExternalOrigin] - var initial_pool_size: c_int diff --git a/ash_dynamics/ffmpeg/avutil/iamf.mojo b/ash_dynamics/ffmpeg/avutil/iamf.mojo deleted file mode 100644 index 1ff82eb..0000000 --- a/ash_dynamics/ffmpeg/avutil/iamf.mojo +++ /dev/null @@ -1,290 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/avutil_8h.html." -from std.ffi import ( - c_int, - c_char, - c_long_long, - c_uchar, - c_ulong, - c_ulong_long, - c_uint, - c_size_t, -) -from std.utils import StaticTuple -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.primitives._clib import C_Union, ExternalFunction -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.channel_layout import AVChannelLayout - - -@fieldwise_init -struct AVIAMFAnimationType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_ANIMATION_TYPE_STEP = Self(0) - comptime AV_IAMF_ANIMATION_TYPE_LINEAR = Self(1) - comptime AV_IAMF_ANIMATION_TYPE_BEZIER = Self(2) - - -@fieldwise_init -struct AVIAMFMixGain(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFMixGain.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var subblock_duration: c_uint - var animation_type: AVIAMFAnimationType.ENUM_DTYPE - var start_point_value: AVRational - var end_point_value: AVRational - var control_point_value: AVRational - var control_point_relative_time: AVRational - - -@fieldwise_init -struct AVIAMFReconGain(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFReconGain.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var subblock_duration: c_uint - var recon_gain: StaticTuple[StaticTuple[c_uchar, 12], 6] - - -@fieldwise_init -struct AVIAMFParamDefinitionType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN = Self(0) - comptime AV_IAMF_PARAMETER_DEFINITION_DEMIXING = Self(1) - comptime AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN = Self(2) - - -@fieldwise_init -struct AVIAMFParamDefinition(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFParamDefinition.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var subblocks_offset: c_size_t - var subblock_size: c_size_t - var nb_subblocks: c_uint - var type: AVIAMFParamDefinitionType.ENUM_DTYPE - var parameter_id: c_uint - var parameter_rate: c_uint - var duration: c_uint - var constant_subblock_duration: c_uint - - -comptime av_iamf_param_definition_get_class = ExternalFunction[ - "av_iamf_param_definition_get_class", - fn() -> UnsafePointer[AVClass, ImmutExternalOrigin], -] - - -comptime av_iamf_param_definition_alloc = ExternalFunction[ - "av_iamf_param_definition_alloc", - fn( - type: AVIAMFParamDefinitionType.ENUM_DTYPE, - nb_subblocks: c_uint, - size: UnsafePointer[c_size_t, MutExternalOrigin], - ) -> UnsafePointer[AVIAMFParamDefinition, MutExternalOrigin], -] - -# TODO: This is an inline function in the iamf.h file. Not sure if we -# need to implement this. -# comptime av_iamf_param_definition_get_subblock = ExternalFunction[ -# "av_iamf_param_definition_get_subblock", -# fn(par: UnsafePointer[AVIAMFParamDefinition, ImmutExternalOrigin], idx: c_uint) -> UnsafePointer[c_void, ImmutExternalOrigin], -# ] - - -@fieldwise_init -struct AVIAMFAmbisonicsMode(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_AMBISONICS_MODE_MONO = Self(0) - comptime AV_IAMF_AMBISONICS_MODE_PROJECTION = Self(1) - - -comptime AV_IAMF_LAYER_FLAG_RECON_GAIN = c_uint(1 << 0) - - -@fieldwise_init -struct AVIAMFLayer(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFLayer.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var ch_layout: AVChannelLayout - var flags: c_uint - var output_gain_flags: c_uint - var output_gain: AVRational - - var ambisonics_mode: AVIAMFAmbisonicsMode.ENUM_DTYPE - var demixing_matrix: UnsafePointer[AVRational, MutExternalOrigin] - - -@fieldwise_init -struct AVIAMFAudioElementType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL = Self(0) - comptime AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE = Self(1) - - -@fieldwise_init -struct AVIAMFAudioElement(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFAudioElement.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var layers: UnsafePointer[ - UnsafePointer[AVIAMFLayer, MutExternalOrigin], MutExternalOrigin - ] - var nb_layers: c_uint - var demixing_info: UnsafePointer[AVIAMFParamDefinition, MutExternalOrigin] - var recon_gain_info: UnsafePointer[AVIAMFParamDefinition, MutExternalOrigin] - var audio_element_type: AVIAMFAudioElementType.ENUM_DTYPE - - var default_w: c_uint - - -comptime av_iamf_audio_element_get_class = ExternalFunction[ - "av_iamf_audio_element_get_class", - fn() -> UnsafePointer[AVClass, ImmutExternalOrigin], -] - -comptime av_iamf_audio_element_alloc = ExternalFunction[ - "av_iamf_audio_element_alloc", - fn() -> UnsafePointer[AVIAMFAudioElement, MutExternalOrigin], -] - -comptime av_iamf_audio_element_add_layer = ExternalFunction[ - "av_iamf_audio_element_add_layer", - fn( - audio_element: UnsafePointer[AVIAMFAudioElement, MutExternalOrigin] - ) -> UnsafePointer[AVIAMFLayer, MutExternalOrigin], -] - -comptime av_iamf_audio_element_free = ExternalFunction[ - "av_iamf_audio_element_free", - fn( - audio_element: UnsafePointer[ - UnsafePointer[AVIAMFAudioElement, MutExternalOrigin], - MutExternalOrigin, - ] - ), -] - - -@fieldwise_init -struct AVIAMFHeadphonesMode(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_HEADPHONES_MODE_STEREO = Self(0) - comptime AV_IAMF_HEADPHONES_MODE_BINAURAL = Self(1) - - -@fieldwise_init -struct AVIAMFSubmixElement(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFSubmixElement.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var audio_element_id: c_uint - var element_mix_config: UnsafePointer[ - AVIAMFParamDefinition, MutExternalOrigin - ] - var default_mix_gain: AVRational - var headphones_rendering_mode: AVIAMFHeadphonesMode.ENUM_DTYPE - var annotations: UnsafePointer[AVDictionary, MutExternalOrigin] - - -@fieldwise_init -struct AVIAMFSubmixLayoutType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS = Self(2) - comptime AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL = Self(3) - - -@fieldwise_init -struct AVIAMFSubmixLayout(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFSubmixLayout.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var layout_type: AVIAMFSubmixLayoutType.ENUM_DTYPE - var sound_system: AVChannelLayout - var integrated_loudness: AVRational - var digital_peak: AVRational - var true_peak: AVRational - var dialogue_anchored_loudness: AVRational - var album_anchored_loudness: AVRational - - -@fieldwise_init -struct AVIAMFSubmix(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFSubmix.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var elements: UnsafePointer[ - UnsafePointer[AVIAMFSubmixElement, MutExternalOrigin], - MutExternalOrigin, - ] - var nb_elements: c_uint - var layouts: UnsafePointer[ - UnsafePointer[AVIAMFSubmixLayout, MutExternalOrigin], - MutExternalOrigin, - ] - var nb_layouts: c_uint - var output_mix_config: UnsafePointer[ - AVIAMFParamDefinition, MutExternalOrigin - ] - var default_mix_gain: AVRational - - -@fieldwise_init -struct AVIAMFMixPresentation(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVIAMFMixPresentation.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var submixes: UnsafePointer[ - UnsafePointer[AVIAMFSubmix, MutExternalOrigin], MutExternalOrigin - ] - var nb_submixes: c_uint - var annotations: UnsafePointer[AVDictionary, MutExternalOrigin] - - -comptime av_iamf_mix_presentation_get_class = ExternalFunction[ - "av_iamf_mix_presentation_get_class", - fn() -> UnsafePointer[AVClass, ImmutExternalOrigin], -] - -comptime av_iamf_mix_presentation_alloc = ExternalFunction[ - "av_iamf_mix_presentation_alloc", - fn() -> UnsafePointer[AVIAMFMixPresentation, MutExternalOrigin], -] - -comptime av_iamf_mix_presentation_add_submix = ExternalFunction[ - "av_iamf_mix_presentation_add_submix", - fn( - mix_presentation: UnsafePointer[ - AVIAMFMixPresentation, MutExternalOrigin - ] - ) -> UnsafePointer[AVIAMFSubmix, MutExternalOrigin], -] - -comptime av_iamf_submix_add_element = ExternalFunction[ - "av_iamf_submix_add_element", - fn( - submix: UnsafePointer[AVIAMFSubmix, MutExternalOrigin] - ) -> UnsafePointer[AVIAMFSubmixElement, MutExternalOrigin], -] - -comptime av_iamf_submix_add_layout = ExternalFunction[ - "av_iamf_submix_add_layout", - fn( - submix: UnsafePointer[AVIAMFSubmix, MutExternalOrigin] - ) -> UnsafePointer[AVIAMFSubmixLayout, MutExternalOrigin], -] - -comptime av_iamf_mix_presentation_free = ExternalFunction[ - "av_iamf_mix_presentation_free", - fn( - mix_presentation: UnsafePointer[ - UnsafePointer[AVIAMFMixPresentation, MutExternalOrigin], - MutExternalOrigin, - ] - ), -] diff --git a/ash_dynamics/ffmpeg/avutil/log.mojo b/ash_dynamics/ffmpeg/avutil/log.mojo deleted file mode 100644 index 0cb05bb..0000000 --- a/ash_dynamics/ffmpeg/avutil/log.mojo +++ /dev/null @@ -1,121 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/log_8h.html." -from std.ffi import c_char, c_int -from ash_dynamics.ffmpeg.avutil.opt import AVOption, AVOptionRanges - - -from std.reflection import get_type_name - - -comptime AVClass_item_name_fn = fn( - ctx: OpaquePointer[MutExternalOrigin] -) -> UnsafePointer[c_char, ImmutExternalOrigin] - - -comptime AVClass_get_category_fn = fn( - ctx: OpaquePointer[MutExternalOrigin] -) -> AVClassCategory.ENUM_DTYPE - -comptime AVClass_query_ranges_fn = fn( - ranges: UnsafePointer[ - UnsafePointer[AVOptionRanges, MutExternalOrigin], MutExternalOrigin - ], - obj: OpaquePointer[MutExternalOrigin], - key: UnsafePointer[c_char, ImmutExternalOrigin], - flags: c_int, -) -> c_int - -comptime AVClass_child_next_fn = fn( - obj: OpaquePointer[MutExternalOrigin], - prev: OpaquePointer[MutExternalOrigin], -) -> OpaquePointer[MutExternalOrigin] - - -comptime AVClass_child_class_iterate_fn[T: AnyType] = fn( - iter: UnsafePointer[OpaquePointer[MutExternalOrigin], MutExternalOrigin] -) -> UnsafePointer[T, ImmutExternalOrigin] - - -struct AVClass(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVClass.html." - var class_name: UnsafePointer[c_char, ImmutExternalOrigin] - - # TODO: Is this correct or do we need to additionally wrap item_name in a - # unsafe pointer? - var item_name: UnsafePointer[AVClass_item_name_fn, MutExternalOrigin] - - var option: UnsafePointer[AVOption, ImmutExternalOrigin] - var version: c_int - var log_level_offset_offset: c_int - var parent_log_context_offset: c_int - var category: AVClassCategory.ENUM_DTYPE - var get_category: UnsafePointer[AVClass_get_category_fn, MutExternalOrigin] - var query_ranges: UnsafePointer[AVClass_query_ranges_fn, MutExternalOrigin] - var child_next: UnsafePointer[AVClass_child_next_fn, MutExternalOrigin] - var child_class_iterate: UnsafePointer[ - AVClass_child_class_iterate_fn[Self], MutExternalOrigin - ] - var state_flags_offset: c_int - - -@fieldwise_init("implicit") -struct AVClassCategory(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_CLASS_CATEGORY_NA = Self(0) - comptime AV_CLASS_CATEGORY_INPUT = Self( - Self.AV_CLASS_CATEGORY_NA._value - ).inc() - comptime AV_CLASS_CATEGORY_OUTPUT = Self( - Self.AV_CLASS_CATEGORY_INPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_MUXER = Self( - Self.AV_CLASS_CATEGORY_OUTPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_DEMUXER = Self( - Self.AV_CLASS_CATEGORY_MUXER._value - ).inc() - comptime AV_CLASS_CATEGORY_ENCODER = Self( - Self.AV_CLASS_CATEGORY_DEMUXER._value - ).inc() - comptime AV_CLASS_CATEGORY_DECODER = Self( - Self.AV_CLASS_CATEGORY_ENCODER._value - ).inc() - comptime AV_CLASS_CATEGORY_FILTER = Self( - Self.AV_CLASS_CATEGORY_DECODER._value - ).inc() - comptime AV_CLASS_CATEGORY_BITSTREAM_FILTER = Self( - Self.AV_CLASS_CATEGORY_FILTER._value - ).inc() - comptime AV_CLASS_CATEGORY_SWSCALER = Self( - Self.AV_CLASS_CATEGORY_BITSTREAM_FILTER._value - ).inc() - comptime AV_CLASS_CATEGORY_SWRESAMPLER = Self( - Self.AV_CLASS_CATEGORY_SWSCALER._value - ).inc() - comptime AV_CLASS_CATEGORY_HWDEVICE = Self( - Self.AV_CLASS_CATEGORY_SWRESAMPLER._value - ).inc() - - comptime AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = Self(40) - comptime AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT = Self( - Self.AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT = Self( - Self.AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT = Self( - Self.AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_DEVICE_OUTPUT = Self( - Self.AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_DEVICE_INPUT = Self( - Self.AV_CLASS_CATEGORY_DEVICE_OUTPUT._value - ).inc() - comptime AV_CLASS_CATEGORY_NB = Self( - Self.AV_CLASS_CATEGORY_DEVICE_INPUT._value - ).inc() diff --git a/ash_dynamics/ffmpeg/avutil/macros.mojo b/ash_dynamics/ffmpeg/avutil/macros.mojo deleted file mode 100644 index 117d31a..0000000 --- a/ash_dynamics/ffmpeg/avutil/macros.mojo +++ /dev/null @@ -1,45 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/macros_8h.html." -from std.ffi import c_int -from ash_dynamics.ffmpeg.avutil.avconfig import AV_HAVE_BIGENDIAN - - -fn AV_NE[T: ImplicitlyCopyable](be: T, le: T) -> T: - comptime if AV_HAVE_BIGENDIAN: - return be - return le - - -@always_inline -fn FFDIFFSIGN[T: Comparable](x: T, y: T) -> Bool: - return Bool(Int(x > y) - Int(x < y)) - - -# define FFMAX(a,b) ((a) > (b) ? (a) : (b)) -# define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) -# define FFMIN(a,b) ((a) > (b) ? (b) : (a)) -# define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) - -# define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) -# define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) - - -@always_inline -fn MKTAG(a: Int, b: Int, c: Int, d: Int) -> Int: - comptime if AV_HAVE_BIGENDIAN: - return (d) | ((c) << 8) | ((b) << 16) | Int(UInt(a) << 24) - - return Int((UInt(a) | (UInt(b) << 8) | (UInt(c) << 16) | UInt(d) << 24)) - - -# String manipulation macros - -# define AV_STRINGIFY(s) AV_TOSTRING(s) -# define AV_TOSTRING(s) #s - -# define AV_GLUE(a, b) a ## b -# define AV_JOIN(a, b) AV_GLUE(a, b) - - -# define AV_PRAGMA(s) _Pragma(#s) - -# define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) diff --git a/ash_dynamics/ffmpeg/avutil/mathematics.mojo b/ash_dynamics/ffmpeg/avutil/mathematics.mojo deleted file mode 100644 index 6c0dc75..0000000 --- a/ash_dynamics/ffmpeg/avutil/mathematics.mojo +++ /dev/null @@ -1,51 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/mathematics_8h.html." -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from std.ffi import c_long_long, external_call - - -@fieldwise_init -struct AVRounding(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var value: Self.ENUM_DTYPE - comptime AV_ROUND_ZERO = Self(0) - comptime AV_ROUND_INF = Self(1) - comptime AV_ROUND_DOWN = Self(2) - comptime AV_ROUND_UP = Self(3) - comptime AV_ROUND_NEAR_INF = Self(5) - - comptime AV_ROUND_PASS_MINMAX = Self(8192) - - -fn av_compare_ts( - ts_a: c_long_long, tb_a: c_long_long, ts_b: c_long_long, tb_b: c_long_long -) -> c_int: - return external_call["av_compare_ts", c_int](ts_a, tb_a, ts_b, tb_b) - - -fn av_compare_ts( - ts_a: c_long_long, tb_a: AVRational, ts_b: c_long_long, tb_b: AVRational -) -> c_int: - return external_call["av_compare_ts", c_int]( - ts_a, tb_a.as_long_long(), ts_b, tb_b.as_long_long() - ) - - -fn av_rescale_rnd( - a: c_long_long, b: c_long_long, c: c_long_long, rnd: AVRounding.ENUM_DTYPE -) -> c_long_long: - return external_call["av_rescale_rnd", c_long_long](a, b, c, rnd) - - -fn av_rescale_q_rnd( - a: c_long_long, bq: c_long_long, cq: c_long_long, rnd: AVRounding.ENUM_DTYPE -) -> c_long_long: - return external_call["av_rescale_q_rnd", c_long_long](a, bq, cq, rnd) - - -fn av_rescale_q_rnd( - a: c_long_long, bq: AVRational, cq: AVRational, rnd: AVRounding.ENUM_DTYPE -) -> c_long_long: - return external_call["av_rescale_q_rnd", c_long_long]( - a, bq.as_long_long(), cq.as_long_long(), rnd - ) diff --git a/ash_dynamics/ffmpeg/avutil/mem.mojo b/ash_dynamics/ffmpeg/avutil/mem.mojo deleted file mode 100644 index bded4c0..0000000 --- a/ash_dynamics/ffmpeg/avutil/mem.mojo +++ /dev/null @@ -1,5 +0,0 @@ -from std.ffi import external_call - - -fn av_freep[T: AnyType](var ptr: UnsafePointer[T, MutExternalOrigin]): - external_call["av_freep", NoneType](ptr) diff --git a/ash_dynamics/ffmpeg/avutil/opt.mojo b/ash_dynamics/ffmpeg/avutil/opt.mojo deleted file mode 100644 index c063d15..0000000 --- a/ash_dynamics/ffmpeg/avutil/opt.mojo +++ /dev/null @@ -1,93 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/opt_8h.html." -from std.ffi import c_char, c_int, c_uint, c_double, c_long_long -from ash_dynamics.primitives._clib import C_Union -from ash_dynamics.ffmpeg.avutil.rational import AVRational - - -# @fieldwise_init -struct AVOption(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVOption.html." - var name: UnsafePointer[c_char, ImmutExternalOrigin] - var help: UnsafePointer[c_char, ImmutExternalOrigin] - var offset: c_int - var type: AVOptionType - var default_val: C_Union[ - c_long_long, - c_double, - UnsafePointer[c_char, ImmutExternalOrigin], - AVRational, - UnsafePointer[AVOptionArrayDef, ImmutExternalOrigin], - ] - var min: c_double - var max: c_double - var flags: c_int - var unit: UnsafePointer[c_char, ImmutExternalOrigin] - - -@fieldwise_init("implicit") -struct AVOptionType(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_OPT_TYPE_FLAGS = Self(1) - comptime AV_OPT_TYPE_INT = Self(Self.AV_OPT_TYPE_FLAGS._value).inc() - comptime AV_OPT_TYPE_INT64 = Self(Self.AV_OPT_TYPE_INT._value).inc() - comptime AV_OPT_TYPE_DOUBLE = Self(Self.AV_OPT_TYPE_INT64._value).inc() - comptime AV_OPT_TYPE_FLOAT = Self(Self.AV_OPT_TYPE_DOUBLE._value).inc() - comptime AV_OPT_TYPE_STRING = Self(Self.AV_OPT_TYPE_FLOAT._value).inc() - comptime AV_OPT_TYPE_RATIONAL = Self(Self.AV_OPT_TYPE_STRING._value).inc() - comptime AV_OPT_TYPE_BINARY = Self(Self.AV_OPT_TYPE_RATIONAL._value).inc() - comptime AV_OPT_TYPE_DICT = Self(Self.AV_OPT_TYPE_BINARY._value).inc() - comptime AV_OPT_TYPE_UINT64 = Self(Self.AV_OPT_TYPE_DICT._value).inc() - comptime AV_OPT_TYPE_CONST = Self(Self.AV_OPT_TYPE_UINT64._value).inc() - comptime AV_OPT_TYPE_IMAGE_SIZE = Self(Self.AV_OPT_TYPE_CONST._value).inc() - comptime AV_OPT_TYPE_PIXEL_FMT = Self( - Self.AV_OPT_TYPE_IMAGE_SIZE._value - ).inc() - comptime AV_OPT_TYPE_SAMPLE_FMT = Self( - Self.AV_OPT_TYPE_PIXEL_FMT._value - ).inc() - comptime AV_OPT_TYPE_VIDEO_RATE = Self( - Self.AV_OPT_TYPE_SAMPLE_FMT._value - ).inc() - comptime AV_OPT_TYPE_DURATION = Self( - Self.AV_OPT_TYPE_VIDEO_RATE._value - ).inc() - comptime AV_OPT_TYPE_COLOR = Self(Self.AV_OPT_TYPE_DURATION._value).inc() - comptime AV_OPT_TYPE_BOOL = Self(Self.AV_OPT_TYPE_COLOR._value).inc() - comptime AV_OPT_TYPE_CHLAYOUT = Self(Self.AV_OPT_TYPE_BOOL._value).inc() - comptime AV_OPT_TYPE_UINT = Self(Self.AV_OPT_TYPE_CHLAYOUT._value).inc() - comptime AV_OPT_TYPE_FLAG_ARRAY = Self(1 << 16) - - -@fieldwise_init -struct AVOptionArrayDef(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVOptionArrayDef.html." - var def_: UnsafePointer[c_char, ImmutExternalOrigin] - var size_min: c_uint - var size_max: c_uint - var sep: c_char - - -@fieldwise_init -struct AVOptionRange(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVOptionRange.html." - var str: UnsafePointer[c_char, ImmutExternalOrigin] - var value_min: c_double - var value_max: c_double - var component_min: c_double - var component_max: c_double - var is_range: c_int - - -struct AVOptionRanges(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structAVOptionRanges.html." - var range: UnsafePointer[ - UnsafePointer[AVOptionRange, MutExternalOrigin], MutExternalOrigin - ] - var nb_ranges: c_int - var nb_components: c_int diff --git a/ash_dynamics/ffmpeg/avutil/pixfmt.mojo b/ash_dynamics/ffmpeg/avutil/pixfmt.mojo deleted file mode 100644 index 5eb31ab..0000000 --- a/ash_dynamics/ffmpeg/avutil/pixfmt.mojo +++ /dev/null @@ -1,1088 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/pixfmt_8h.html." -from std.ffi import c_int - - -# TODO: We could move the comments for each enum to be for the format: -# var thing -# "documentation of thing" -# which should show up in the docs then - - -@fieldwise_init("implicit") -struct AVPixelFormat(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_PIX_FMT_NONE = Self(-1) - - comptime AV_PIX_FMT_YUV420P = Self( - Self.AV_PIX_FMT_NONE._value - ).inc() # planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - comptime AV_PIX_FMT_YUYV422 = Self( - Self.AV_PIX_FMT_YUV420P._value - ).inc() # packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - comptime AV_PIX_FMT_RGB24 = Self( - Self.AV_PIX_FMT_YUYV422._value - ).inc() # packed RGB 8:8:8, 24bpp, RGBRGB... - comptime AV_PIX_FMT_BGR24 = Self( - Self.AV_PIX_FMT_RGB24._value - ).inc() # packed RGB 8:8:8, 24bpp, BGRBGR... - comptime AV_PIX_FMT_YUV422P = Self( - Self.AV_PIX_FMT_BGR24._value - ).inc() # planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - comptime AV_PIX_FMT_YUV444P = Self( - Self.AV_PIX_FMT_YUV422P._value - ).inc() # planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - comptime AV_PIX_FMT_YUV410P = Self( - Self.AV_PIX_FMT_YUV444P._value - ).inc() # planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - comptime AV_PIX_FMT_YUV411P = Self( - Self.AV_PIX_FMT_YUV410P._value - ).inc() # planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - comptime AV_PIX_FMT_GRAY8 = Self( - Self.AV_PIX_FMT_YUV411P._value - ).inc() # Y , 8bpp - comptime AV_PIX_FMT_MONOWHITE = Self( - Self.AV_PIX_FMT_GRAY8._value - ).inc() # Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - comptime AV_PIX_FMT_MONOBLACK = Self( - Self.AV_PIX_FMT_MONOWHITE._value - ).inc() # Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - comptime AV_PIX_FMT_PAL8 = Self( - Self.AV_PIX_FMT_MONOBLACK._value - ).inc() # 8 bits with AV_PIX_FMT_RGB32 palette - comptime AV_PIX_FMT_YUVJ420P = Self( - Self.AV_PIX_FMT_PAL8._value - ).inc() # planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - comptime AV_PIX_FMT_YUVJ422P = Self( - Self.AV_PIX_FMT_YUVJ420P._value - ).inc() # planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - comptime AV_PIX_FMT_YUVJ444P = Self( - Self.AV_PIX_FMT_YUVJ422P._value - ).inc() # planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - comptime AV_PIX_FMT_UYVY422 = Self( - Self.AV_PIX_FMT_YUVJ444P._value - ).inc() # packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - comptime AV_PIX_FMT_UYYVYY411 = Self( - Self.AV_PIX_FMT_UYVY422._value - ).inc() # packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - comptime AV_PIX_FMT_BGR8 = Self( - Self.AV_PIX_FMT_UYYVYY411._value - ).inc() # packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - comptime AV_PIX_FMT_BGR4 = Self( - Self.AV_PIX_FMT_BGR8._value - ).inc() # packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - comptime AV_PIX_FMT_BGR4_BYTE = Self( - Self.AV_PIX_FMT_BGR4._value - ).inc() # packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - comptime AV_PIX_FMT_RGB8 = Self( - Self.AV_PIX_FMT_BGR4_BYTE._value - ).inc() # packed RGB 3:3:2, 8bpp, (msb)3R 3G 2B(lsb) - comptime AV_PIX_FMT_RGB4 = Self( - Self.AV_PIX_FMT_RGB8._value - ).inc() # packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - comptime AV_PIX_FMT_RGB4_BYTE = Self( - Self.AV_PIX_FMT_RGB4._value - ).inc() # packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - comptime AV_PIX_FMT_NV12 = Self( - Self.AV_PIX_FMT_RGB4_BYTE._value - ).inc() # planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - comptime AV_PIX_FMT_NV21 = Self( - Self.AV_PIX_FMT_NV12._value - ).inc() # as above, but U and V bytes are swapped - - comptime AV_PIX_FMT_ARGB = Self( - Self.AV_PIX_FMT_NV21._value - ).inc() # packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - comptime AV_PIX_FMT_RGBA = Self( - Self.AV_PIX_FMT_ARGB._value - ).inc() # packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - comptime AV_PIX_FMT_ABGR = Self( - Self.AV_PIX_FMT_RGBA._value - ).inc() # packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - comptime AV_PIX_FMT_BGRA = Self( - Self.AV_PIX_FMT_ABGR._value - ).inc() # packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - comptime AV_PIX_FMT_GRAY16BE = Self( - Self.AV_PIX_FMT_BGRA._value - ).inc() # Y , 16bpp, big-endian - comptime AV_PIX_FMT_GRAY16LE = Self( - Self.AV_PIX_FMT_GRAY16BE._value - ).inc() # Y , 16bpp, little-endian - comptime AV_PIX_FMT_YUV440P = Self( - Self.AV_PIX_FMT_GRAY16LE._value - ).inc() # planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - comptime AV_PIX_FMT_YUVJ440P = Self( - Self.AV_PIX_FMT_YUV440P._value - ).inc() # planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - comptime AV_PIX_FMT_YUVA420P = Self( - Self.AV_PIX_FMT_YUVJ440P._value - ).inc() # planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - comptime AV_PIX_FMT_RGB48BE = Self( - Self.AV_PIX_FMT_YUVA420P._value - ).inc() # packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - comptime AV_PIX_FMT_RGB48LE = Self( - Self.AV_PIX_FMT_RGB48BE._value - ).inc() # packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - comptime AV_PIX_FMT_RGB565BE = Self( - Self.AV_PIX_FMT_RGB48LE._value - ).inc() # packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - comptime AV_PIX_FMT_RGB565LE = Self( - Self.AV_PIX_FMT_RGB565BE._value - ).inc() # packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - comptime AV_PIX_FMT_RGB555BE = Self( - Self.AV_PIX_FMT_RGB565LE._value - ).inc() # packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - comptime AV_PIX_FMT_RGB555LE = Self( - Self.AV_PIX_FMT_RGB555BE._value - ).inc() # packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - comptime AV_PIX_FMT_BGR565BE = Self( - Self.AV_PIX_FMT_RGB555LE._value - ).inc() # packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - comptime AV_PIX_FMT_BGR565LE = Self( - Self.AV_PIX_FMT_BGR565BE._value - ).inc() # packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - comptime AV_PIX_FMT_BGR555BE = Self( - Self.AV_PIX_FMT_BGR565LE._value - ).inc() # packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - comptime AV_PIX_FMT_BGR555LE = Self( - Self.AV_PIX_FMT_BGR555BE._value - ).inc() # packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - - comptime AV_PIX_FMT_VAAPI = Self(Self.AV_PIX_FMT_BGR555LE._value).inc() - - comptime AV_PIX_FMT_YUV420P16LE = Self( - Self.AV_PIX_FMT_VAAPI._value - ).inc() # planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV420P16BE = Self( - Self.AV_PIX_FMT_YUV420P16LE._value - ).inc() # planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV422P16LE = Self( - Self.AV_PIX_FMT_YUV420P16BE._value - ).inc() # planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV422P16BE = Self( - Self.AV_PIX_FMT_YUV422P16LE._value - ).inc() # planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV444P16LE = Self( - Self.AV_PIX_FMT_YUV422P16BE._value - ).inc() # planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV444P16BE = Self( - Self.AV_PIX_FMT_YUV444P16LE._value - ).inc() # planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - comptime AV_PIX_FMT_DXVA2_VLD = Self( - Self.AV_PIX_FMT_YUV444P16BE._value - ).inc() # HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - comptime AV_PIX_FMT_RGB444LE = Self( - Self.AV_PIX_FMT_DXVA2_VLD._value - ).inc() # packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - comptime AV_PIX_FMT_RGB444BE = Self( - Self.AV_PIX_FMT_RGB444LE._value - ).inc() # packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - comptime AV_PIX_FMT_BGR444LE = Self( - Self.AV_PIX_FMT_RGB444BE._value - ).inc() # packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - comptime AV_PIX_FMT_BGR444BE = Self( - Self.AV_PIX_FMT_BGR444LE._value - ).inc() # packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - comptime AV_PIX_FMT_YA8 = Self( - Self.AV_PIX_FMT_BGR444BE._value - ).inc() # 8 bits gray, 8 bits alpha - - comptime AV_PIX_FMT_Y400A = Self( - Self.AV_PIX_FMT_YA8._value - ) # alias for AV_PIX_FMT_YA8 - comptime AV_PIX_FMT_GRAY8A = Self( - Self.AV_PIX_FMT_YA8._value - ) # alias for AV_PIX_FMT_YA8 - - comptime AV_PIX_FMT_BGR48BE = Self( - Self.AV_PIX_FMT_GRAY8A._value - ).inc() # packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - comptime AV_PIX_FMT_BGR48LE = Self( - Self.AV_PIX_FMT_BGR48BE._value - ).inc() # packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian - - # - # The following 12 formats have the disadvantage of needing 1 format for each bit depth. - # Notice that each 9/10 bits sample is stored in 16 bits with extra padding. - # If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. - # - comptime AV_PIX_FMT_YUV420P9BE = Self( - Self.AV_PIX_FMT_BGR48LE._value - ).inc() # planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV420P9LE = Self( - Self.AV_PIX_FMT_YUV420P9BE._value - ).inc() # planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV420P10BE = Self( - Self.AV_PIX_FMT_YUV420P9LE._value - ).inc() # planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV420P10LE = Self( - Self.AV_PIX_FMT_YUV420P10BE._value - ).inc() # planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV422P10BE = Self( - Self.AV_PIX_FMT_YUV420P10LE._value - ).inc() # planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV422P10LE = Self( - Self.AV_PIX_FMT_YUV422P10BE._value - ).inc() # planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV444P9BE = Self( - Self.AV_PIX_FMT_YUV422P10LE._value - ).inc() # planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV444P9LE = Self( - Self.AV_PIX_FMT_YUV444P9BE._value - ).inc() # planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV444P10BE = Self( - Self.AV_PIX_FMT_YUV444P9LE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV444P10LE = Self( - Self.AV_PIX_FMT_YUV444P10BE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV422P9BE = Self( - Self.AV_PIX_FMT_YUV444P10LE._value - ).inc() # planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV422P9LE = Self( - Self.AV_PIX_FMT_YUV422P9BE._value - ).inc() # planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_GBRP = Self( - Self.AV_PIX_FMT_YUV422P9LE._value - ).inc() # planar GBR 4:4:4 24bpp - comptime AV_PIX_FMT_GBR24P = Self( - Self.AV_PIX_FMT_GBRP._value - ) # alias for #AV_PIX_FMT_GBRP - comptime AV_PIX_FMT_GBRP9BE = Self( - Self.AV_PIX_FMT_GBR24P._value - ).inc() # planar GBR 4:4:4 27bpp, big-endian - comptime AV_PIX_FMT_GBRP9LE = Self( - Self.AV_PIX_FMT_GBRP9BE._value - ).inc() # planar GBR 4:4:4 27bpp, little-endian - comptime AV_PIX_FMT_GBRP10BE = Self( - Self.AV_PIX_FMT_GBRP9LE._value - ).inc() # planar GBR 4:4:4 30bpp, big-endian - comptime AV_PIX_FMT_GBRP10LE = Self( - Self.AV_PIX_FMT_GBRP10BE._value - ).inc() # planar GBR 4:4:4 30bpp, little-endian - comptime AV_PIX_FMT_GBRP16BE = Self( - Self.AV_PIX_FMT_GBRP10LE._value - ).inc() # planar GBR 4:4:4 48bpp, big-endian - comptime AV_PIX_FMT_GBRP16LE = Self( - Self.AV_PIX_FMT_GBRP16BE._value - ).inc() # planar GBR 4:4:4 48bpp, little-endian - comptime AV_PIX_FMT_YUVA422P = Self( - Self.AV_PIX_FMT_GBRP16LE._value - ).inc() # planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - comptime AV_PIX_FMT_YUVA444P = Self( - Self.AV_PIX_FMT_YUVA422P._value - ).inc() # planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - comptime AV_PIX_FMT_YUVA420P9BE = Self( - Self.AV_PIX_FMT_YUVA444P._value - ).inc() # planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - comptime AV_PIX_FMT_YUVA420P9LE = Self( - Self.AV_PIX_FMT_YUVA420P9BE._value - ).inc() # planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - comptime AV_PIX_FMT_YUVA422P9BE = Self( - Self.AV_PIX_FMT_YUVA420P9LE._value - ).inc() # planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - comptime AV_PIX_FMT_YUVA422P9LE = Self( - Self.AV_PIX_FMT_YUVA422P9BE._value - ).inc() # planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - comptime AV_PIX_FMT_YUVA444P9BE = Self( - Self.AV_PIX_FMT_YUVA422P9LE._value - ).inc() # planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - comptime AV_PIX_FMT_YUVA444P9LE = Self( - Self.AV_PIX_FMT_YUVA444P9BE._value - ).inc() # planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - comptime AV_PIX_FMT_YUVA420P10BE = Self( - Self.AV_PIX_FMT_YUVA444P9LE._value - ).inc() # planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA420P10LE = Self( - Self.AV_PIX_FMT_YUVA420P10BE._value - ).inc() # planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - comptime AV_PIX_FMT_YUVA422P10BE = Self( - Self.AV_PIX_FMT_YUVA420P10LE._value - ).inc() # planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA422P10LE = Self( - Self.AV_PIX_FMT_YUVA422P10BE._value - ).inc() # planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - comptime AV_PIX_FMT_YUVA444P10BE = Self( - Self.AV_PIX_FMT_YUVA422P10LE._value - ).inc() # planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA444P10LE = Self( - Self.AV_PIX_FMT_YUVA444P10BE._value - ).inc() # planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - comptime AV_PIX_FMT_YUVA420P16BE = Self( - Self.AV_PIX_FMT_YUVA444P10LE._value - ).inc() # planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA420P16LE = Self( - Self.AV_PIX_FMT_YUVA420P16BE._value - ).inc() # planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - comptime AV_PIX_FMT_YUVA422P16BE = Self( - Self.AV_PIX_FMT_YUVA420P16LE._value - ).inc() # planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA422P16LE = Self( - Self.AV_PIX_FMT_YUVA422P16BE._value - ).inc() # planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - comptime AV_PIX_FMT_YUVA444P16BE = Self( - Self.AV_PIX_FMT_YUVA422P16LE._value - ).inc() # planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - comptime AV_PIX_FMT_YUVA444P16LE = Self( - Self.AV_PIX_FMT_YUVA444P16BE._value - ).inc() # planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - comptime AV_PIX_FMT_VDPAU = Self( - Self.AV_PIX_FMT_YUVA444P16LE._value - ).inc() # HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - comptime AV_PIX_FMT_XYZ12LE = Self( - Self.AV_PIX_FMT_VDPAU._value - ).inc() # packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 - comptime AV_PIX_FMT_XYZ12BE = Self( - Self.AV_PIX_FMT_XYZ12LE._value - ).inc() # packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 - comptime AV_PIX_FMT_NV16 = Self( - Self.AV_PIX_FMT_XYZ12BE._value - ).inc() # interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - comptime AV_PIX_FMT_NV20LE = Self( - Self.AV_PIX_FMT_NV16._value - ).inc() # interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_NV20BE = Self( - Self.AV_PIX_FMT_NV20LE._value - ).inc() # interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - comptime AV_PIX_FMT_RGBA64BE = Self( - Self.AV_PIX_FMT_NV20BE._value - ).inc() # packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - comptime AV_PIX_FMT_RGBA64LE = Self( - Self.AV_PIX_FMT_RGBA64BE._value - ).inc() # packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - comptime AV_PIX_FMT_BGRA64BE = Self( - Self.AV_PIX_FMT_RGBA64LE._value - ).inc() # packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - comptime AV_PIX_FMT_BGRA64LE = Self( - Self.AV_PIX_FMT_BGRA64BE._value - ).inc() # packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - - comptime AV_PIX_FMT_YVYU422 = Self( - Self.AV_PIX_FMT_BGRA64LE._value - ).inc() # packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - comptime AV_PIX_FMT_YA16BE = Self( - Self.AV_PIX_FMT_YVYU422._value - ).inc() # 16 bits gray, 16 bits alpha (big-endian) - comptime AV_PIX_FMT_YA16LE = Self( - Self.AV_PIX_FMT_YA16BE._value - ).inc() # 16 bits gray, 16 bits alpha (little-endian) - - comptime AV_PIX_FMT_GBRAP = Self( - Self.AV_PIX_FMT_YA16LE._value - ).inc() # planar GBRA 4:4:4:4 32bpp - comptime AV_PIX_FMT_GBRAP16BE = Self( - Self.AV_PIX_FMT_GBRAP._value - ).inc() # planar GBRA 4:4:4:4 64bpp, big-endian - comptime AV_PIX_FMT_GBRAP16LE = Self( - Self.AV_PIX_FMT_GBRAP16BE._value - ).inc() # planar GBRA 4:4:4:4 64bpp, little-endian - # - # HW acceleration through QSV, data[3] contains a pointer to the - # mfxFrameSurface1 structure. - # - # Before FFmpeg 5.0: - # mfxFrameSurface1.Data.MemId contains a pointer when importing - # the following frames as QSV frames: - # - # VAAPI: - # mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID - # - # DXVA2: - # mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 - # - # FFmpeg 5.0 and above: - # mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair - # structure when importing the following frames as QSV frames: - # - # VAAPI: - # mfxHDLPair.first contains a VASurfaceID pointer. - # mfxHDLPair.second is always MFX_INFINITE. - # - # DXVA2: - # mfxHDLPair.first contains IDirect3DSurface9 pointer. - # mfxHDLPair.second is always MFX_INFINITE. - # - # D3D11: - # mfxHDLPair.first contains a ID3D11Texture2D pointer. - # mfxHDLPair.second contains the texture array index of the frame if the - # ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a - # normal texture. - # - comptime AV_PIX_FMT_QSV = Self(Self.AV_PIX_FMT_GBRAP16LE._value).inc() - # - # HW acceleration though MMAL, data[3] contains a pointer to the - # MMAL_BUFFER_HEADER_T structure. - # - comptime AV_PIX_FMT_MMAL = Self(Self.AV_PIX_FMT_QSV._value).inc() - - comptime AV_PIX_FMT_D3D11VA_VLD = Self( - Self.AV_PIX_FMT_MMAL._value - ).inc() # HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer - - # - # HW acceleration through CUDA. data[i] contain CUdeviceptr pointers - # exactly as for system memory frames. - # - comptime AV_PIX_FMT_CUDA = Self(Self.AV_PIX_FMT_D3D11VA_VLD._value).inc() - - comptime AV_PIX_FMT_0RGB = Self( - Self.AV_PIX_FMT_CUDA._value - ).inc() # packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - comptime AV_PIX_FMT_RGB0 = Self( - Self.AV_PIX_FMT_0RGB._value - ).inc() # packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - comptime AV_PIX_FMT_0BGR = Self( - Self.AV_PIX_FMT_RGB0._value - ).inc() # packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - comptime AV_PIX_FMT_BGR0 = Self( - Self.AV_PIX_FMT_0BGR._value - ).inc() # packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - comptime AV_PIX_FMT_YUV420P12BE = Self( - Self.AV_PIX_FMT_BGR0._value - ).inc() # planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV420P12LE = Self( - Self.AV_PIX_FMT_YUV420P12BE._value - ).inc() # planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV420P14BE = Self( - Self.AV_PIX_FMT_YUV420P12LE._value - ).inc() # planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV420P14LE = Self( - Self.AV_PIX_FMT_YUV420P14BE._value - ).inc() # planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV422P12BE = Self( - Self.AV_PIX_FMT_YUV420P14LE._value - ).inc() # planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV422P12LE = Self( - Self.AV_PIX_FMT_YUV422P12BE._value - ).inc() # planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV422P14BE = Self( - Self.AV_PIX_FMT_YUV422P12LE._value - ).inc() # planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV422P14LE = Self( - Self.AV_PIX_FMT_YUV422P14BE._value - ).inc() # planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV444P12BE = Self( - Self.AV_PIX_FMT_YUV422P14LE._value - ).inc() # planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV444P12LE = Self( - Self.AV_PIX_FMT_YUV444P12BE._value - ).inc() # planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - comptime AV_PIX_FMT_YUV444P14BE = Self( - Self.AV_PIX_FMT_YUV444P12LE._value - ).inc() # planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - comptime AV_PIX_FMT_YUV444P14LE = Self( - Self.AV_PIX_FMT_YUV444P14BE._value - ).inc() # planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - comptime AV_PIX_FMT_GBRP12BE = Self( - Self.AV_PIX_FMT_YUV444P14LE._value - ).inc() # planar GBR 4:4:4 36bpp, big-endian - comptime AV_PIX_FMT_GBRP12LE = Self( - Self.AV_PIX_FMT_GBRP12BE._value - ).inc() # planar GBR 4:4:4 36bpp, little-endian - comptime AV_PIX_FMT_GBRP14BE = Self( - Self.AV_PIX_FMT_GBRP12LE._value - ).inc() # planar GBR 4:4:4 42bpp, big-endian - comptime AV_PIX_FMT_GBRP14LE = Self( - Self.AV_PIX_FMT_GBRP14BE._value - ).inc() # planar GBR 4:4:4 42bpp, little-endian - comptime AV_PIX_FMT_YUVJ411P = Self( - Self.AV_PIX_FMT_GBRP14LE._value - ).inc() # planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range - - comptime AV_PIX_FMT_BAYER_BGGR8 = Self( - Self.AV_PIX_FMT_YUVJ411P._value - ).inc() # bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - comptime AV_PIX_FMT_BAYER_RGGB8 = Self( - Self.AV_PIX_FMT_BAYER_BGGR8._value - ).inc() # bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - comptime AV_PIX_FMT_BAYER_GBRG8 = Self( - Self.AV_PIX_FMT_BAYER_RGGB8._value - ).inc() # bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - comptime AV_PIX_FMT_BAYER_GRBG8 = Self( - Self.AV_PIX_FMT_BAYER_GBRG8._value - ).inc() # bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - comptime AV_PIX_FMT_BAYER_BGGR16LE = Self( - Self.AV_PIX_FMT_BAYER_GRBG8._value - ).inc() # bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - comptime AV_PIX_FMT_BAYER_BGGR16BE = Self( - Self.AV_PIX_FMT_BAYER_BGGR16LE._value - ).inc() # bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - comptime AV_PIX_FMT_BAYER_RGGB16LE = Self( - Self.AV_PIX_FMT_BAYER_BGGR16BE._value - ).inc() # bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - comptime AV_PIX_FMT_BAYER_RGGB16BE = Self( - Self.AV_PIX_FMT_BAYER_RGGB16LE._value - ).inc() # bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - comptime AV_PIX_FMT_BAYER_GBRG16LE = Self( - Self.AV_PIX_FMT_BAYER_RGGB16BE._value - ).inc() # bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - comptime AV_PIX_FMT_BAYER_GBRG16BE = Self( - Self.AV_PIX_FMT_BAYER_GBRG16LE._value - ).inc() # bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - comptime AV_PIX_FMT_BAYER_GRBG16LE = Self( - Self.AV_PIX_FMT_BAYER_GBRG16BE._value - ).inc() # bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - comptime AV_PIX_FMT_BAYER_GRBG16BE = Self( - Self.AV_PIX_FMT_BAYER_GRBG16LE._value - ).inc() # bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - comptime AV_PIX_FMT_YUV440P10LE = Self( - Self.AV_PIX_FMT_BAYER_GRBG16BE._value - ).inc() # planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV440P10BE = Self( - Self.AV_PIX_FMT_YUV440P10LE._value - ).inc() # planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - comptime AV_PIX_FMT_YUV440P12LE = Self( - Self.AV_PIX_FMT_YUV440P10BE._value - ).inc() # planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - comptime AV_PIX_FMT_YUV440P12BE = Self( - Self.AV_PIX_FMT_YUV440P12LE._value - ).inc() # planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - comptime AV_PIX_FMT_AYUV64LE = Self( - Self.AV_PIX_FMT_YUV440P12BE._value - ).inc() # packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - comptime AV_PIX_FMT_AYUV64BE = Self( - Self.AV_PIX_FMT_AYUV64LE._value - ).inc() # packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - comptime AV_PIX_FMT_VIDEOTOOLBOX = Self( - Self.AV_PIX_FMT_AYUV64BE._value - ).inc() # hardware decoding through Videotoolbox - - comptime AV_PIX_FMT_P010LE = Self( - Self.AV_PIX_FMT_VIDEOTOOLBOX._value - ).inc() # like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - comptime AV_PIX_FMT_P010BE = Self( - Self.AV_PIX_FMT_P010LE._value - ).inc() # like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - comptime AV_PIX_FMT_GBRAP12BE = Self( - Self.AV_PIX_FMT_P010BE._value - ).inc() # planar GBR 4:4:4:4 48bpp, big-endian - comptime AV_PIX_FMT_GBRAP12LE = Self( - Self.AV_PIX_FMT_GBRAP12BE._value - ).inc() # planar GBR 4:4:4:4 48bpp, little-endian - - comptime AV_PIX_FMT_GBRAP10BE = Self( - Self.AV_PIX_FMT_GBRAP12LE._value - ).inc() # planar GBR 4:4:4:4 40bpp, big-endian - comptime AV_PIX_FMT_GBRAP10LE = Self( - Self.AV_PIX_FMT_GBRAP10BE._value - ).inc() # planar GBR 4:4:4:4 40bpp, little-endian - - comptime AV_PIX_FMT_MEDIACODEC = Self( - Self.AV_PIX_FMT_GBRAP10LE._value - ).inc() # hardware decoding through MediaCodec - - comptime AV_PIX_FMT_GRAY12BE = Self( - Self.AV_PIX_FMT_MEDIACODEC._value - ).inc() # Y , 12bpp, big-endian - comptime AV_PIX_FMT_GRAY12LE = Self( - Self.AV_PIX_FMT_GRAY12BE._value - ).inc() # Y , 12bpp, little-endian - comptime AV_PIX_FMT_GRAY10BE = Self( - Self.AV_PIX_FMT_GRAY12LE._value - ).inc() # Y , 10bpp, big-endian - comptime AV_PIX_FMT_GRAY10LE = Self( - Self.AV_PIX_FMT_GRAY10BE._value - ).inc() # Y , 10bpp, little-endian - - comptime AV_PIX_FMT_P016LE = Self( - Self.AV_PIX_FMT_GRAY10LE._value - ).inc() # like NV12, with 16bpp per component, little-endian - comptime AV_PIX_FMT_P016BE = Self( - Self.AV_PIX_FMT_P016LE._value - ).inc() # like NV12, with 16bpp per component, big-endian - - # - # Hardware surfaces for Direct3D11. - # - # This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11 - # hwaccel API and filtering support AV_PIX_FMT_D3D11 only. - # - # data[0] contains a ID3D11Texture2D pointer, and data[1] contains the - # texture array index of the frame as intptr_t if the ID3D11Texture2D is - # an array texture (or always 0 if it's a normal texture). - # - comptime AV_PIX_FMT_D3D11 = Self(Self.AV_PIX_FMT_P016BE._value).inc() - - comptime AV_PIX_FMT_GRAY9BE = Self( - Self.AV_PIX_FMT_D3D11._value - ).inc() # Y , 9bpp, big-endian - comptime AV_PIX_FMT_GRAY9LE = Self( - Self.AV_PIX_FMT_GRAY9BE._value - ).inc() # Y , 9bpp, little-endian - - comptime AV_PIX_FMT_GBRPF32BE = Self( - Self.AV_PIX_FMT_GRAY9LE._value - ).inc() # IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - comptime AV_PIX_FMT_GBRPF32LE = Self( - Self.AV_PIX_FMT_GBRPF32BE._value - ).inc() # IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - comptime AV_PIX_FMT_GBRAPF32BE = Self( - Self.AV_PIX_FMT_GBRPF32LE._value - ).inc() # IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - comptime AV_PIX_FMT_GBRAPF32LE = Self( - Self.AV_PIX_FMT_GBRAPF32BE._value - ).inc() # IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian - - # - # DRM-managed buffers exposed through PRIME buffer sharing. - # - # data[0] points to an AVDRMFrameDescriptor. - # - comptime AV_PIX_FMT_DRM_PRIME = Self( - Self.AV_PIX_FMT_GBRAPF32LE._value - ).inc() - # - # Hardware surfaces for OpenCL. - # - # data[i] contain 2D image objects (typed in C as cl_mem, used - # in OpenCL as image2d_t) for each plane of the surface. - # - comptime AV_PIX_FMT_OPENCL = Self(Self.AV_PIX_FMT_DRM_PRIME._value).inc() - - comptime AV_PIX_FMT_GRAY14BE = Self( - Self.AV_PIX_FMT_OPENCL._value - ).inc() # Y , 14bpp, big-endian - comptime AV_PIX_FMT_GRAY14LE = Self( - Self.AV_PIX_FMT_GRAY14BE._value - ).inc() # Y , 14bpp, little-endian - - comptime AV_PIX_FMT_GRAYF32BE = Self( - Self.AV_PIX_FMT_GRAY14LE._value - ).inc() # IEEE-754 single precision Y, 32bpp, big-endian - comptime AV_PIX_FMT_GRAYF32LE = Self( - Self.AV_PIX_FMT_GRAYF32BE._value - ).inc() # IEEE-754 single precision Y, 32bpp, little-endian - - comptime AV_PIX_FMT_YUVA422P12BE = Self( - Self.AV_PIX_FMT_GRAYF32LE._value - ).inc() # planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - comptime AV_PIX_FMT_YUVA422P12LE = Self( - Self.AV_PIX_FMT_YUVA422P12BE._value - ).inc() # planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - comptime AV_PIX_FMT_YUVA444P12BE = Self( - Self.AV_PIX_FMT_YUVA422P12LE._value - ).inc() # planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - comptime AV_PIX_FMT_YUVA444P12LE = Self( - Self.AV_PIX_FMT_YUVA444P12BE._value - ).inc() # planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - comptime AV_PIX_FMT_NV24 = Self( - Self.AV_PIX_FMT_YUVA444P12LE._value - ).inc() # planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - comptime AV_PIX_FMT_NV42 = Self( - Self.AV_PIX_FMT_NV24._value - ).inc() # as above, but U and V bytes are swapped - - # - # Vulkan hardware images. - # - # data[0] points to an AVVkFrame - # - comptime AV_PIX_FMT_VULKAN = Self(Self.AV_PIX_FMT_NV42._value).inc() - - comptime AV_PIX_FMT_Y210BE = Self( - Self.AV_PIX_FMT_VULKAN._value - ).inc() # packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - comptime AV_PIX_FMT_Y210LE = Self( - Self.AV_PIX_FMT_Y210BE._value - ).inc() # packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - comptime AV_PIX_FMT_X2RGB10LE = Self( - Self.AV_PIX_FMT_Y210LE._value - ).inc() # packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - comptime AV_PIX_FMT_X2RGB10BE = Self( - Self.AV_PIX_FMT_X2RGB10LE._value - ).inc() # packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - comptime AV_PIX_FMT_X2BGR10LE = Self( - Self.AV_PIX_FMT_X2RGB10BE._value - ).inc() # packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined - comptime AV_PIX_FMT_X2BGR10BE = Self( - Self.AV_PIX_FMT_X2BGR10LE._value - ).inc() # packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined - - comptime AV_PIX_FMT_P210BE = Self( - Self.AV_PIX_FMT_X2BGR10BE._value - ).inc() # interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian - comptime AV_PIX_FMT_P210LE = Self( - Self.AV_PIX_FMT_P210BE._value - ).inc() # interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian - - comptime AV_PIX_FMT_P410BE = Self( - Self.AV_PIX_FMT_P210LE._value - ).inc() # interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian - comptime AV_PIX_FMT_P410LE = Self( - Self.AV_PIX_FMT_P410BE._value - ).inc() # interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian - - comptime AV_PIX_FMT_P216BE = Self( - Self.AV_PIX_FMT_P410LE._value - ).inc() # interleaved chroma YUV 4:2:2, 32bpp, big-endian - comptime AV_PIX_FMT_P216LE = Self( - Self.AV_PIX_FMT_P216BE._value - ).inc() # interleaved chroma YUV 4:2:2, 32bpp, little-endian - - comptime AV_PIX_FMT_P416BE = Self( - Self.AV_PIX_FMT_P216LE._value - ).inc() # interleaved chroma YUV 4:4:4, 48bpp, big-endian - comptime AV_PIX_FMT_P416LE = Self( - Self.AV_PIX_FMT_P416BE._value - ).inc() # interleaved chroma YUV 4:4:4, 48bpp, little-endian - - comptime AV_PIX_FMT_VUYA = Self( - Self.AV_PIX_FMT_P416LE._value - ).inc() # packed VUYA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), VUYAVUYA... - - comptime AV_PIX_FMT_RGBAF16BE = Self( - Self.AV_PIX_FMT_VUYA._value - ).inc() # IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian - comptime AV_PIX_FMT_RGBAF16LE = Self( - Self.AV_PIX_FMT_RGBAF16BE._value - ).inc() # IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian - - comptime AV_PIX_FMT_VUYX = Self( - Self.AV_PIX_FMT_RGBAF16LE._value - ).inc() # packed VUYX 4:4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined - - comptime AV_PIX_FMT_P012LE = Self( - Self.AV_PIX_FMT_VUYX._value - ).inc() # like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, little-endian - comptime AV_PIX_FMT_P012BE = Self( - Self.AV_PIX_FMT_P012LE._value - ).inc() # like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, big-endian - - comptime AV_PIX_FMT_Y212BE = Self( - Self.AV_PIX_FMT_P012BE._value - ).inc() # packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, big-endian - comptime AV_PIX_FMT_Y212LE = Self( - Self.AV_PIX_FMT_Y212BE._value - ).inc() # packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, little-endian - - comptime AV_PIX_FMT_XV30BE = Self( - Self.AV_PIX_FMT_Y212LE._value - ).inc() # packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), big-endian, variant of Y410 where alpha channel is left undefined - comptime AV_PIX_FMT_XV30LE = Self( - Self.AV_PIX_FMT_XV30BE._value - ).inc() # packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channel is left undefined - - comptime AV_PIX_FMT_XV36BE = Self( - Self.AV_PIX_FMT_XV30LE._value - ).inc() # packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian, variant of Y412 where alpha channel is left undefined - comptime AV_PIX_FMT_XV36LE = Self( - Self.AV_PIX_FMT_XV36BE._value - ).inc() # packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian, variant of Y412 where alpha channel is left undefined - - comptime AV_PIX_FMT_RGBF32BE = Self( - Self.AV_PIX_FMT_XV36LE._value - ).inc() # IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian - comptime AV_PIX_FMT_RGBF32LE = Self( - Self.AV_PIX_FMT_RGBF32BE._value - ).inc() # IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian - - comptime AV_PIX_FMT_RGBAF32BE = Self( - Self.AV_PIX_FMT_RGBF32LE._value - ).inc() # IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian - comptime AV_PIX_FMT_RGBAF32LE = Self( - Self.AV_PIX_FMT_RGBAF32BE._value - ).inc() # IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian - - comptime AV_PIX_FMT_P212BE = Self( - Self.AV_PIX_FMT_RGBAF32LE._value - ).inc() # interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, big-endian - comptime AV_PIX_FMT_P212LE = Self( - Self.AV_PIX_FMT_P212BE._value - ).inc() # interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, little-endian - - comptime AV_PIX_FMT_P412BE = Self( - Self.AV_PIX_FMT_P212LE._value - ).inc() # interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, big-endian - comptime AV_PIX_FMT_P412LE = Self( - Self.AV_PIX_FMT_P412BE._value - ).inc() # interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, little-endian - - comptime AV_PIX_FMT_GBRAP14BE = Self( - Self.AV_PIX_FMT_P412LE._value - ).inc() # planar GBR 4:4:4:4 56bpp, big-endian - comptime AV_PIX_FMT_GBRAP14LE = Self( - Self.AV_PIX_FMT_GBRAP14BE._value - ).inc() # planar GBR 4:4:4:4 56bpp, little-endian - - # - # Hardware surfaces for Direct3D 12. - # - # data[0] points to an AVD3D12VAFrame - # - comptime AV_PIX_FMT_D3D12 = Self(Self.AV_PIX_FMT_GBRAP14LE._value).inc() - - comptime AV_PIX_FMT_AYUV = Self( - Self.AV_PIX_FMT_D3D12._value - ).inc() # packed AYUV 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), AYUVAYUV... - - comptime AV_PIX_FMT_UYVA = Self( - Self.AV_PIX_FMT_AYUV._value - ).inc() # packed UYVA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), UYVAUYVA... - - comptime AV_PIX_FMT_VYU444 = Self( - Self.AV_PIX_FMT_UYVA._value - ).inc() # packed VYU 4:4:4, 24bpp (1 Cr & Cb sample per 1x1 Y), VYUVYU... - - comptime AV_PIX_FMT_V30XBE = Self( - Self.AV_PIX_FMT_VYU444._value - ).inc() # packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), big-endian - comptime AV_PIX_FMT_V30XLE = Self( - Self.AV_PIX_FMT_V30XBE._value - ).inc() # packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian - - comptime AV_PIX_FMT_RGBF16BE = Self( - Self.AV_PIX_FMT_V30XLE._value - ).inc() # IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., big-endian - comptime AV_PIX_FMT_RGBF16LE = Self( - Self.AV_PIX_FMT_RGBF16BE._value - ).inc() # IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., little-endian - - comptime AV_PIX_FMT_RGBA128BE = Self( - Self.AV_PIX_FMT_RGBF16LE._value - ).inc() # packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian - comptime AV_PIX_FMT_RGBA128LE = Self( - Self.AV_PIX_FMT_RGBA128BE._value - ).inc() # packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian - - comptime AV_PIX_FMT_RGB96BE = Self( - Self.AV_PIX_FMT_RGBA128LE._value - ).inc() # packed RGBA 32:32:32, 96bpp, RGBRGB..., big-endian - comptime AV_PIX_FMT_RGB96LE = Self( - Self.AV_PIX_FMT_RGB96BE._value - ).inc() # packed RGBA 32:32:32, 96bpp, RGBRGB..., little-endian - - comptime AV_PIX_FMT_Y216BE = Self( - Self.AV_PIX_FMT_RGB96LE._value - ).inc() # packed YUV 4:2:2 like YUYV422, 32bpp, big-endian - comptime AV_PIX_FMT_Y216LE = Self( - Self.AV_PIX_FMT_Y216BE._value - ).inc() # packed YUV 4:2:2 like YUYV422, 32bpp, little-endian - - comptime AV_PIX_FMT_XV48BE = Self( - Self.AV_PIX_FMT_Y216LE._value - ).inc() # packed XVYU 4:4:4, 64bpp, big-endian, variant of Y416 where alpha channel is left undefined - comptime AV_PIX_FMT_XV48LE = Self( - Self.AV_PIX_FMT_XV48BE._value - ).inc() # packed XVYU 4:4:4, 64bpp, little-endian, variant of Y416 where alpha channel is left undefined - - comptime AV_PIX_FMT_GBRPF16BE = Self( - Self.AV_PIX_FMT_XV48LE._value - ).inc() # IEEE-754 half precision planer GBR 4:4:4, 48bpp, big-endian - comptime AV_PIX_FMT_GBRPF16LE = Self( - Self.AV_PIX_FMT_GBRPF16BE._value - ).inc() # IEEE-754 half precision planer GBR 4:4:4, 48bpp, little-endian - comptime AV_PIX_FMT_GBRAPF16BE = Self( - Self.AV_PIX_FMT_GBRPF16LE._value - ).inc() # IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, big-endian - comptime AV_PIX_FMT_GBRAPF16LE = Self( - Self.AV_PIX_FMT_GBRAPF16BE._value - ).inc() # IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, little-endian - - comptime AV_PIX_FMT_GRAYF16BE = Self( - Self.AV_PIX_FMT_GBRAPF16LE._value - ).inc() # IEEE-754 half precision Y, 16bpp, big-endian - comptime AV_PIX_FMT_GRAYF16LE = Self( - Self.AV_PIX_FMT_GRAYF16BE._value - ).inc() # IEEE-754 half precision Y, 16bpp, little-endian - - # - # HW acceleration through AMF. data[0] contain AMFSurface pointer - # - comptime AV_PIX_FMT_AMF_SURFACE = Self( - Self.AV_PIX_FMT_GRAYF16LE._value - ).inc() - - comptime AV_PIX_FMT_GRAY32BE = Self( - Self.AV_PIX_FMT_AMF_SURFACE._value - ).inc() # Y , 32bpp, big-endian - comptime AV_PIX_FMT_GRAY32LE = Self( - Self.AV_PIX_FMT_GRAY32BE._value - ).inc() # Y , 32bpp, little-endian - comptime AV_PIX_FMT_YAF32BE = Self( - Self.AV_PIX_FMT_GRAY32LE._value - ).inc() # IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, big-endian - comptime AV_PIX_FMT_YAF32LE = Self( - Self.AV_PIX_FMT_YAF32BE._value - ).inc() # IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, little-endian - - comptime AV_PIX_FMT_YAF16BE = Self( - Self.AV_PIX_FMT_YAF32LE._value - ).inc() # IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, big-endian - comptime AV_PIX_FMT_YAF16LE = Self( - Self.AV_PIX_FMT_YAF16BE._value - ).inc() # IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, little-endian - - comptime AV_PIX_FMT_GBRAP32BE = Self( - Self.AV_PIX_FMT_YAF16LE._value - ).inc() # planar GBRA 4:4:4:4 128bpp, big-endian - comptime AV_PIX_FMT_GBRAP32LE = Self( - Self.AV_PIX_FMT_GBRAP32BE._value - ).inc() # planar GBRA 4:4:4:4 128bpp, little-endian - - comptime AV_PIX_FMT_YUV444P10MSBBE = Self( - Self.AV_PIX_FMT_GBRAP32LE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian - comptime AV_PIX_FMT_YUV444P10MSBLE = Self( - Self.AV_PIX_FMT_YUV444P10MSBBE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian - comptime AV_PIX_FMT_YUV444P12MSBBE = Self( - Self.AV_PIX_FMT_YUV444P10MSBLE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian - comptime AV_PIX_FMT_YUV444P12MSBLE = Self( - Self.AV_PIX_FMT_YUV444P12MSBBE._value - ).inc() # planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian - comptime AV_PIX_FMT_GBRP10MSBBE = Self( - Self.AV_PIX_FMT_YUV444P12MSBLE._value - ).inc() # planar GBR 4:4:4 30bpp, lowest bits zero, big-endian - comptime AV_PIX_FMT_GBRP10MSBLE = Self( - Self.AV_PIX_FMT_GBRP10MSBBE._value - ).inc() # planar GBR 4:4:4 30bpp, lowest bits zero, little-endian - comptime AV_PIX_FMT_GBRP12MSBBE = Self( - Self.AV_PIX_FMT_GBRP10MSBLE._value - ).inc() # planar GBR 4:4:4 36bpp, lowest bits zero, big-endian - comptime AV_PIX_FMT_GBRP12MSBLE = Self( - Self.AV_PIX_FMT_GBRP12MSBBE._value - ).inc() # planar GBR 4:4:4 36bpp, lowest bits zero, little-endian - - comptime AV_PIX_FMT_OHCODEC = Self( - Self.AV_PIX_FMT_GBRP12MSBLE._value - ).inc() # hardware decoding through openharmony - - comptime AV_PIX_FMT_NB = Self( - Self.AV_PIX_FMT_OHCODEC._value - ).inc() # number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versionswe - - -@fieldwise_init -struct AVColorRange(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AVCOL_RANGE_UNSPECIFIED = Self(0) - - comptime AVCOL_RANGE_MPEG = Self(1) - - comptime AVCOL_RANGE_JPEG = Self(2) - - comptime AVCOL_RANGE_NB = Self(3) - - -@fieldwise_init("implicit") -struct AVColorPrimaries(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AVCOL_PRI_RESERVED0 = Self(0) - comptime AVCOL_PRI_BT709 = Self(1) - comptime AVCOL_PRI_UNSPECIFIED = Self(2) - comptime AVCOL_PRI_RESERVED = Self(3) - comptime AVCOL_PRI_BT470M = Self(4) - - comptime AVCOL_PRI_BT470BG = Self(5) - comptime AVCOL_PRI_SMPTE170M = Self(6) - comptime AVCOL_PRI_SMPTE240M = Self(7) - comptime AVCOL_PRI_FILM = Self(8) - comptime AVCOL_PRI_BT2020 = Self(9) - comptime AVCOL_PRI_SMPTE428 = Self(10) - comptime AVCOL_PRI_SMPTEST428_1 = Self.AVCOL_PRI_SMPTE428 - comptime AVCOL_PRI_SMPTE431 = Self(11) - comptime AVCOL_PRI_SMPTE432 = Self(12) - comptime AVCOL_PRI_EBU3213 = Self(22) - comptime AVCOL_PRI_JEDEC_P22 = Self(Self.AVCOL_PRI_EBU3213._value) - comptime AVCOL_PRI_NB = Self(Self.AVCOL_PRI_JEDEC_P22._value + 1) - - -@fieldwise_init("implicit") -struct AVColorTransferCharacteristic(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AVCOL_TRC_RESERVED0 = Self(0) - comptime AVCOL_TRC_BT709 = Self(1) - comptime AVCOL_TRC_UNSPECIFIED = Self(2) - comptime AVCOL_TRC_RESERVED = Self(3) - comptime AVCOL_TRC_GAMMA22 = Self(4) - comptime AVCOL_TRC_GAMMA28 = Self(5) - comptime AVCOL_TRC_SMPTE170M = Self(6) - comptime AVCOL_TRC_SMPTE240M = Self(7) - comptime AVCOL_TRC_LINEAR = Self(8) - comptime AVCOL_TRC_LOG = Self(9) - comptime AVCOL_TRC_LOG_SQRT = Self(10) - comptime AVCOL_TRC_IEC61966_2_4 = Self(11) - comptime AVCOL_TRC_BT1361_ECG = Self(12) - comptime AVCOL_TRC_IEC61966_2_1 = Self(13) - comptime AVCOL_TRC_BT2020_10 = Self(14) - comptime AVCOL_TRC_BT2020_12 = Self(15) - comptime AVCOL_TRC_SMPTE2084 = Self(16) - comptime AVCOL_TRC_SMPTEST2084 = Self(Self.AVCOL_TRC_SMPTE2084._value) - comptime AVCOL_TRC_SMPTE428 = Self(17) - comptime AVCOL_TRC_SMPTEST428_1 = Self(Self.AVCOL_TRC_SMPTE428._value) - comptime AVCOL_TRC_ARIB_STD_B67 = Self(18) - comptime AVCOL_TRC_NB = Self(Self.AVCOL_TRC_ARIB_STD_B67._value + 1) - - -@fieldwise_init("implicit") -struct AVColorSpace(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AVCOL_SPC_RGB = Self(0) - comptime AVCOL_SPC_BT709 = Self(1) - comptime AVCOL_SPC_UNSPECIFIED = Self(2) - - comptime AVCOL_SPC_RESERVED = Self(3) - comptime AVCOL_SPC_FCC = Self(4) - comptime AVCOL_SPC_BT470BG = Self(5) - comptime AVCOL_SPC_SMPTE170M = Self(6) - comptime AVCOL_SPC_SMPTE240M = Self(7) - comptime AVCOL_SPC_YCGCO = Self(8) - comptime AVCOL_SPC_YCOCG = Self(Self.AVCOL_SPC_YCGCO._value) - - comptime AVCOL_SPC_BT2020_NCL = Self(9) - comptime AVCOL_SPC_BT2020_CL = Self(10) - comptime AVCOL_SPC_SMPTE2085 = Self(11) - comptime AVCOL_SPC_CHROMA_DERIVED_NCL = Self(12) - comptime AVCOL_SPC_CHROMA_DERIVED_CL = Self(13) - comptime AVCOL_SPC_ICTCP = Self(14) - comptime AVCOL_SPC_IPT_C2 = Self(15) - comptime AVCOL_SPC_YCGCO_RE = Self(16) - comptime AVCOL_SPC_YCGCO_RO = Self(17) - comptime AVCOL_SPC_NB = Self(Self.AVCOL_SPC_YCGCO_RO._value + 1) - - -@fieldwise_init("implicit") -struct AVChromaLocation(Movable, Writable): - comptime ENUM_DTYPE = c_int - var _value: Self.ENUM_DTYPE - - comptime AVCHROMA_LOC_UNSPECIFIED = Self(0) - comptime AVCHROMA_LOC_LEFT = Self(1) - comptime AVCHROMA_LOC_CENTER = Self(2) - comptime AVCHROMA_LOC_TOPLEFT = Self(3) - comptime AVCHROMA_LOC_TOP = Self(4) - comptime AVCHROMA_LOC_BOTTOMLEFT = Self(5) - comptime AVCHROMA_LOC_BOTTOM = Self(6) - comptime AVCHROMA_LOC_NB = Self(Self.AVCHROMA_LOC_BOTTOM._value + 1) diff --git a/ash_dynamics/ffmpeg/avutil/rational.mojo b/ash_dynamics/ffmpeg/avutil/rational.mojo deleted file mode 100644 index 6e8cf0f..0000000 --- a/ash_dynamics/ffmpeg/avutil/rational.mojo +++ /dev/null @@ -1,22 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/rational_8h.html." -from std.ffi import c_int, c_long_long - - -@fieldwise_init -struct AVRational(TrivialRegisterPassable, Writable): - """Represents a rational number. - - FFI Binding warning: AVRational must be passed via `as_long_long()` to - c ABI function calls if it is to be passed by value. - - References: - - https://www.ffmpeg.org/doxygen/8.0/structAVRational.html - """ - - var num: c_int - "Numerator." - var den: c_int - "Denominator." - - fn as_long_long(self) -> c_long_long: - return c_long_long(self.den) << 32 | c_long_long(self.num) diff --git a/ash_dynamics/ffmpeg/avutil/refstruct.mojo b/ash_dynamics/ffmpeg/avutil/refstruct.mojo deleted file mode 100644 index dd04994..0000000 --- a/ash_dynamics/ffmpeg/avutil/refstruct.mojo +++ /dev/null @@ -1,2 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/refstruct_8h.html." -comptime AVRefStructPool = OpaquePointer[MutExternalOrigin] diff --git a/ash_dynamics/ffmpeg/avutil/samplefmt.mojo b/ash_dynamics/ffmpeg/avutil/samplefmt.mojo deleted file mode 100644 index 0809124..0000000 --- a/ash_dynamics/ffmpeg/avutil/samplefmt.mojo +++ /dev/null @@ -1,53 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/samplefmt_8h.html." -from std.ffi import c_int - - -@fieldwise_init("implicit") -struct AVSampleFormat(Movable, Writable): - comptime ENUM_DTYPE = c_int - - var _value: Self.ENUM_DTYPE - - fn inc(self) -> Self: - return Self(self._value + 1) - - comptime AV_SAMPLE_FMT_NONE = Self(-1) - comptime AV_SAMPLE_FMT_U8 = Self( - Self.AV_SAMPLE_FMT_NONE._value - ).inc() # unsigned 8 bits - comptime AV_SAMPLE_FMT_S16 = Self( - Self.AV_SAMPLE_FMT_U8._value - ).inc() # signed 16 bits - comptime AV_SAMPLE_FMT_S32 = Self( - Self.AV_SAMPLE_FMT_S16._value - ).inc() # signed 32 bits - comptime AV_SAMPLE_FMT_FLT = Self( - Self.AV_SAMPLE_FMT_S32._value - ).inc() # float - comptime AV_SAMPLE_FMT_DBL = Self( - Self.AV_SAMPLE_FMT_FLT._value - ).inc() # double - comptime AV_SAMPLE_FMT_U8P = Self( - Self.AV_SAMPLE_FMT_DBL._value - ).inc() # unsigned 8 bits, planar - comptime AV_SAMPLE_FMT_S16P = Self( - Self.AV_SAMPLE_FMT_U8P._value - ).inc() # signed 16 bits, planar - comptime AV_SAMPLE_FMT_S32P = Self( - Self.AV_SAMPLE_FMT_S16P._value - ).inc() # signed 32 bits, planar - comptime AV_SAMPLE_FMT_FLTP = Self( - Self.AV_SAMPLE_FMT_S32P._value - ).inc() # float, planar - comptime AV_SAMPLE_FMT_DBLP = Self( - Self.AV_SAMPLE_FMT_FLTP._value - ).inc() # double, planar - comptime AV_SAMPLE_FMT_S64 = Self( - Self.AV_SAMPLE_FMT_DBLP._value - ).inc() # signed 64 bits - comptime AV_SAMPLE_FMT_S64P = Self( - Self.AV_SAMPLE_FMT_S64._value - ).inc() # signed 64 bits, planar - comptime AV_SAMPLE_FMT_NB = Self( - Self.AV_SAMPLE_FMT_S64P._value - ).inc() # Number of sample formats. DO NOT USE if linking dynamically diff --git a/ash_dynamics/ffmpeg/swrsample/__init__.mojo b/ash_dynamics/ffmpeg/swrsample/__init__.mojo deleted file mode 100644 index 513549f..0000000 --- a/ash_dynamics/ffmpeg/swrsample/__init__.mojo +++ /dev/null @@ -1,2 +0,0 @@ -"""See https://www.ffmpeg.org/doxygen/8.0/swresample_8h_source.html.""" -from .swrsample import * diff --git a/ash_dynamics/ffmpeg/swrsample/swrsample.mojo b/ash_dynamics/ffmpeg/swrsample/swrsample.mojo deleted file mode 100644 index 4c750cf..0000000 --- a/ash_dynamics/ffmpeg/swrsample/swrsample.mojo +++ /dev/null @@ -1,201 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/swresample_8h.html." -from std.ffi import ( - c_int, - c_uchar, - c_long_long, - c_double, - c_size_t, - external_call, -) -from ash_dynamics.primitives._clib import ExternalFunction, c_ptrdiff_t -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.channel_layout import ( - AVChannelLayout, - AVMatrixEncoding, -) -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat - - -######################################################## -# === Option constants === -######################################################## -# -# These constants are used for the ref avoptions interface for lswr. -######################################################## - -comptime SWR_FLAG_RESAMPLE = Int(1) - - -@fieldwise_init -struct SwrDitherType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWR_DITHER_NONE = Self(0) - comptime SWR_DITHER_RECTANGULAR = Self(1) - comptime SWR_DITHER_TRIANGULAR = Self(2) - comptime SWR_DITHER_TRIANGULAR_HIGHPASS = Self(3) - - comptime SWR_DITHER_NS = Self(64) - comptime SWR_DITHER_NS_LIPSHITZ = Self(65) - comptime SWR_DITHER_NS_F_WEIGHTED = Self(66) - comptime SWR_DITHER_NS_MODIFIED_E_WEIGHTED = Self(67) - comptime SWR_DITHER_NS_IMPROVED_E_WEIGHTED = Self(68) - comptime SWR_DITHER_NS_SHIBATA = Self(69) - comptime SWR_DITHER_NS_LOW_SHIBATA = Self(70) - comptime SWR_DITHER_NS_HIGH_SHIBATA = Self(71) - comptime SWR_DITHER_NB = Self(72) - - -@fieldwise_init -struct SwrEngine(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWR_ENGINE_SWR = Self(0) - comptime SWR_ENGINE_SOXR = Self(1) - comptime SWR_ENGINE_NB = Self(2) - - -@fieldwise_init -struct SwrFilterType(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWR_FILTER_TYPE_CUBIC = Self(0) - comptime SWR_FILTER_TYPE_BLACKMAN_NUTTALL = Self(1) - comptime SWR_FILTER_TYPE_KAISER = Self(2) - - -@fieldwise_init -struct SwrContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structSwrContext.html." - pass - - -fn swr_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "swr_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -fn swr_alloc() -> UnsafePointer[SwrContext, MutExternalOrigin]: - return external_call[ - "swr_alloc", UnsafePointer[SwrContext, MutExternalOrigin] - ]() - - -fn swr_init(context: UnsafePointer[SwrContext, MutExternalOrigin]) -> c_int: - return external_call["swr_init", c_int](context) - - -fn swr_is_initialized( - context: UnsafePointer[SwrContext, ImmutExternalOrigin] -) -> c_int: - return external_call["swr_is_initialized", c_int](context) - - -fn swr_alloc_set_opts2( - context: UnsafePointer[ - UnsafePointer[SwrContext, MutExternalOrigin], MutExternalOrigin - ], - out_ch_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - out_sample_fmt: AVSampleFormat.ENUM_DTYPE, - out_sample_rate: c_int, - in_ch_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - in_sample_fmt: AVSampleFormat.ENUM_DTYPE, - in_sample_rate: c_int, - log_offset: c_int, - log_ctx: OpaquePointer[MutExternalOrigin], -) -> c_int: - return external_call["swr_alloc_set_opts2", c_int]( - context, - out_ch_layout, - out_sample_fmt, - out_sample_rate, - in_ch_layout, - in_sample_fmt, - in_sample_rate, - log_offset, - log_ctx, - ) - - -fn swr_free( - context: UnsafePointer[ - UnsafePointer[SwrContext, MutExternalOrigin], MutExternalOrigin - ] -): - external_call["swr_free", NoneType](context) - - -fn swr_close(context: UnsafePointer[SwrContext, MutExternalOrigin]): - external_call["swr_close", NoneType](context) - - -fn swr_convert( - s: UnsafePointer[SwrContext, MutExternalOrigin], - out_: UnsafePointer[ - UnsafePointer[c_uchar, MutExternalOrigin], ImmutExternalOrigin - ], - out_count: c_int, - in_: UnsafePointer[ - UnsafePointer[c_uchar, ImmutExternalOrigin], ImmutExternalOrigin - ], - in_count: c_int, -) -> c_int: - return external_call["swr_convert", c_int]( - s, out_, out_count, in_, in_count - ) - - -fn swr_next_pts( - s: UnsafePointer[SwrContext, MutExternalOrigin], - pts: c_long_long, -) -> c_long_long: - return external_call["swr_next_pts", c_long_long](s, pts) - - -fn swr_set_compensation( - s: UnsafePointer[SwrContext, MutExternalOrigin], - sample_delta: c_int, - compensation_distance: c_int, -) -> c_int: - return external_call["swr_set_compensation", c_int]( - s, sample_delta, compensation_distance - ) - - -fn swr_set_channel_mapping( - s: UnsafePointer[SwrContext, MutExternalOrigin], - channel_map: UnsafePointer[c_int, ImmutExternalOrigin], -) -> c_int: - return external_call["swr_set_channel_mapping", c_int](s, channel_map) - - -fn swr_build_matrix2( - in_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - out_layout: UnsafePointer[AVChannelLayout, ImmutExternalOrigin], - center_mix_level: c_double, - surround_mix_level: c_double, - lfe_mix_level: c_double, - rematrix_maxval: c_double, - rematrix_volume: c_double, - matrix: UnsafePointer[c_double, MutExternalOrigin], - stride: c_ptrdiff_t, - matrix_encoding: AVMatrixEncoding.ENUM_DTYPE, - log_ctx: OpaquePointer[MutExternalOrigin], -) -> c_int: - return external_call["swr_build_matrix2", c_int]( - in_layout, - out_layout, - center_mix_level, - surround_mix_level, - lfe_mix_level, - rematrix_maxval, - rematrix_volume, - matrix, - stride, - matrix_encoding, - log_ctx, - ) diff --git a/ash_dynamics/ffmpeg/swscale/__init__.mojo b/ash_dynamics/ffmpeg/swscale/__init__.mojo deleted file mode 100644 index 458ef64..0000000 --- a/ash_dynamics/ffmpeg/swscale/__init__.mojo +++ /dev/null @@ -1,2 +0,0 @@ -"""See https://www.ffmpeg.org/doxygen/8.0/swscale_8h_source.html.""" -from .swscale import * diff --git a/ash_dynamics/ffmpeg/swscale/swscale.mojo b/ash_dynamics/ffmpeg/swscale/swscale.mojo deleted file mode 100644 index a72cde8..0000000 --- a/ash_dynamics/ffmpeg/swscale/swscale.mojo +++ /dev/null @@ -1,525 +0,0 @@ -"See https://www.ffmpeg.org/doxygen/8.0/swscale_8h.html." -from std.ffi import ( - c_int, - c_char, - c_uchar, - c_long_long, - c_uint, - c_size_t, - c_double, - c_float, - external_call, -) -from std.sys._libc import dup, fclose, fdopen, fflush, FILE_ptr -from std.utils import StaticTuple -from ash_dynamics.primitives._clib import C_Union -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket, AVPacketSideData -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avcodec.defs import AVDiscard -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecParserContext - -from ash_dynamics.ffmpeg.avutil.log import AVClass -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.pixfmt import ( - AVPixelFormat, - AVColorSpace, - AVColorPrimaries, - AVColorTransferCharacteristic, -) -from ash_dynamics.ffmpeg.avformat.internal import AVCodecTag -from ash_dynamics.ffmpeg.avformat.avio import AVIOContext, AVIOInterruptCB - -from ash_dynamics.ffmpeg.avutil.iamf import ( - AVIAMFMixPresentation, - AVIAMFSubmix, - AVIAMFSubmixElement, - AVIAMFSubmixLayout, - AVIAMFAudioElement, - AVIAMFLayer, - AVIAMFParamDefinition, - AVIAMFAudioElementType, - AVIAMFHeadphonesMode, - AVIAMFSubmixLayoutType, -) - - -fn swscale_version() -> c_uint: - return external_call["swscale_version", c_uint]() - - -fn swscale_configuration() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "swscale_configuration", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn swscale_license() -> UnsafePointer[c_char, ImmutExternalOrigin]: - return external_call[ - "swscale_license", UnsafePointer[c_char, ImmutExternalOrigin] - ]() - - -fn sws_get_class() -> UnsafePointer[AVClass, ImmutExternalOrigin]: - return external_call[ - "sws_get_class", UnsafePointer[AVClass, ImmutExternalOrigin] - ]() - - -############################# -# Flags and quality settings # -############################# - - -@fieldwise_init -struct SwsDither(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWS_DITHER_NONE = Self(0) - comptime SWS_DITHER_AUTO = Self(1) - comptime SWS_DITHER_BAYER = Self(2) - comptime SWS_DITHER_ED = Self(3) - comptime SWS_DITHER_A_DITHER = Self(4) - comptime SWS_DITHER_X_DITHER = Self(5) - comptime SWS_DITHER_NB = Self(6) - - -@fieldwise_init -struct SwsAlphaBlend(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWS_ALPHA_BLEND_NONE = Self(0) - comptime SWS_ALPHA_BLEND_UNIFORM = Self(1) - comptime SWS_ALPHA_BLEND_CHECKERBOARD = Self(2) - comptime SWS_ALPHA_BLEND_NB = Self(3) - - -@fieldwise_init -struct SwsFlags(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWS_FAST_BILINEAR = Self(1 << 0) - comptime SWS_BILINEAR = Self(1 << 1) - comptime SWS_BICUBIC = Self(1 << 2) - comptime SWS_X = Self(1 << 3) - comptime SWS_POINT = Self(1 << 4) - comptime SWS_AREA = Self(1 << 5) - comptime SWS_BICUBLIN = Self(1 << 6) - comptime SWS_GAUSS = Self(1 << 7) - comptime SWS_SINC = Self(1 << 8) - comptime SWS_LANCZOS = Self(1 << 9) - comptime SWS_SPLINE = Self(1 << 10) - - comptime SWS_STRICT = Self(1 << 11) - - comptime SWS_PRINT_INFO = Self(1 << 12) - - comptime SWS_FULL_CHR_H_INT = Self(1 << 13) - comptime SWS_FULL_CHR_H_INP = Self(1 << 14) - comptime SWS_ACCURATE_RND = Self(1 << 18) - - comptime SWS_BITEXACT = Self(1 << 19) - - # Deprecated flags. - comptime SWS_DIRECT_BGR = Self(1 << 15) - comptime SWS_ERROR_DIFFUSION = Self(1 << 23) - - -@fieldwise_init -struct SwsIntent(Movable, Writable): - comptime ENUM_DTYPE = c_int - var value: Self.ENUM_DTYPE - - comptime SWS_INTENT_PERCEPTUAL = Self(0) - comptime SWS_INTENT_RELATIVE_COLORIMETRIC = Self(1) - comptime SWS_INTENT_SATURATION = Self(2) - comptime SWS_INTENT_ABSOLUTE_COLORIMETRIC = Self(3) - comptime SWS_INTENT_NB = Self(4) - - -################################### -# Context creation and management # -################################### - - -@fieldwise_init -struct SwsContext(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structSwsContext.html." - var av_class: UnsafePointer[AVClass, ImmutExternalOrigin] - var opaque: OpaquePointer[MutExternalOrigin] - var flags: SwsFlags.ENUM_DTYPE - var scaler_params: StaticTuple[c_double, 2] - var threads: c_int - var dither: SwsDither.ENUM_DTYPE - var alpha_blend: SwsAlphaBlend.ENUM_DTYPE - var gamma_flag: c_int - - # Deprecated frame property overrides, for the legacy API only. - # Ignored by sws_scale_frame() when used in dynamic mode, in which - # case all properties are instead taken from the frame directly. - var src_w: c_int - var src_h: c_int - var src_format: c_int - var dst_format: c_int - var src_range: c_int - var dst_range: c_int - var src_v_chr_pos: c_int - var src_h_chr_pos: c_int - var dst_v_chr_pos: c_int - var dst_h_chr_pos: c_int - - var intent: c_int - - # Remember to add new fields to graph.c:opts_equal() - - -#################################################### -# Supported frame formats # -#################################################### - - -fn sws_test_format(format: AVPixelFormat.ENUM_DTYPE, output: c_int) -> c_int: - return external_call["sws_test_format", c_int](format, output) - - -fn sws_test_colorspace( - colorspace: AVColorSpace.ENUM_DTYPE, output: c_int -) -> c_int: - return external_call["sws_test_colorspace", c_int](colorspace, output) - - -fn sws_test_primaries( - primaries: AVColorPrimaries.ENUM_DTYPE, output: c_int -) -> c_int: - return external_call["sws_test_primaries", c_int](primaries, output) - - -fn sws_test_transfer( - transfer: AVColorTransferCharacteristic.ENUM_DTYPE, output: c_int -) -> c_int: - return external_call["sws_test_transfer", c_int](transfer, output) - - -fn sws_test_frame( - frame: UnsafePointer[AVFrame, ImmutExternalOrigin], output: c_int -) -> c_int: - return external_call["sws_test_frame", c_int](frame, output) - - -fn sws_frame_setup( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - dst: UnsafePointer[AVFrame, ImmutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["sws_frame_setup", c_int](ctx, dst, src) - - -#################################################### -# Main scaling API # -#################################################### - - -fn sws_is_noop( - dst: UnsafePointer[AVFrame, ImmutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["sws_is_noop", c_int](dst, src) - - -fn sws_scale_frame( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["sws_scale_frame", c_int](ctx, dst, src) - - -#################################################### -# Legacy (stateful) API # -#################################################### - -comptime SWS_SRC_V_CHR_DROP_MASK = 0x30000 -comptime SWS_SRC_V_CHR_DROP_SHIFT = 16 - -comptime SWS_PARAM_DEFAULT = 123456 -comptime SWS_MAX_REDUCE_CUTOFF = 0.002 - -comptime SWS_CS_ITU709 = 1 -comptime SWS_CS_FCC = 4 -comptime SWS_CS_ITU601 = 5 -comptime SWS_CS_ITU624 = 5 -comptime SWS_CS_SMPTE170M = 5 -comptime SWS_CS_SMPTE240M = 7 -comptime SWS_CS_DEFAULT = 5 -comptime SWS_CS_BT2020 = 9 - - -fn sws_getCoefficients( - colorspace: c_int, -) -> UnsafePointer[c_int, ImmutExternalOrigin]: - return external_call[ - "sws_getCoefficients", UnsafePointer[c_int, ImmutExternalOrigin] - ](colorspace) - - -@fieldwise_init -struct SwsVector(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structSwsVector.html." - var coeff: UnsafePointer[c_double, ImmutExternalOrigin] - var length: c_int - - -@fieldwise_init -struct SwsFilter(Movable, Writable): - "See https://www.ffmpeg.org/doxygen/8.0/structSwsFilter.html." - var lumH: UnsafePointer[SwsVector, ImmutExternalOrigin] - var lumV: UnsafePointer[SwsVector, ImmutExternalOrigin] - var chrH: UnsafePointer[SwsVector, ImmutExternalOrigin] - var chrV: UnsafePointer[SwsVector, ImmutExternalOrigin] - - -fn sws_isSupportedInput(pix_fmt: AVPixelFormat.ENUM_DTYPE) -> c_int: - return external_call["sws_isSupportedInput", c_int](pix_fmt) - - -fn sws_isSupportedOutput(pix_fmt: AVPixelFormat.ENUM_DTYPE) -> c_int: - return external_call["sws_isSupportedOutput", c_int](pix_fmt) - - -fn sws_isSupportedEndiannessConversion( - pix_fmt: AVPixelFormat.ENUM_DTYPE, -) -> c_int: - return external_call["sws_isSupportedEndiannessConversion", c_int](pix_fmt) - - -fn sws_init_context( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - srcFilter: UnsafePointer[SwsFilter, MutExternalOrigin], - dstFilter: UnsafePointer[SwsFilter, MutExternalOrigin], -) -> c_int: - return external_call["sws_init_context", c_int](ctx, srcFilter, dstFilter) - - -fn sws_freeContext(ctx: UnsafePointer[SwsContext, MutExternalOrigin]): - external_call["sws_freeContext", NoneType](ctx) - - -fn sws_getContext( - srcW: c_int, - srcH: c_int, - srcFormat: AVPixelFormat.ENUM_DTYPE, - dstW: c_int, - dstH: c_int, - dstFormat: AVPixelFormat.ENUM_DTYPE, - flags: c_int, - srcFilter: UnsafePointer[SwsFilter, MutExternalOrigin], - dstFilter: UnsafePointer[SwsFilter, MutExternalOrigin], - param: UnsafePointer[c_double, ImmutExternalOrigin], -) -> UnsafePointer[SwsContext, MutExternalOrigin]: - return external_call[ - "sws_getContext", UnsafePointer[SwsContext, MutExternalOrigin] - ]( - srcW, - srcH, - srcFormat, - dstW, - dstH, - dstFormat, - flags, - srcFilter, - dstFilter, - param, - ) - - -fn sws_scale( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - srcSlice: UnsafePointer[ - UnsafePointer[c_uchar, ImmutExternalOrigin], ImmutExternalOrigin - ], - srcStride: UnsafePointer[c_int, ImmutExternalOrigin], - srcSliceY: c_int, - srcSliceH: c_int, - dst: UnsafePointer[ - UnsafePointer[c_uchar, MutExternalOrigin], MutExternalOrigin - ], - dstStride: UnsafePointer[c_int, ImmutExternalOrigin], -) -> c_int: - return external_call["sws_scale", c_int]( - ctx, srcSlice, srcStride, srcSliceY, srcSliceH, dst, dstStride - ) - - -fn sws_frame_start( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - dst: UnsafePointer[AVFrame, MutExternalOrigin], - src: UnsafePointer[AVFrame, ImmutExternalOrigin], -) -> c_int: - return external_call["sws_frame_start", c_int](ctx, dst, src) - - -fn sws_frame_end(ctx: UnsafePointer[SwsContext, MutExternalOrigin]): - external_call["sws_frame_end", NoneType](ctx) - - -fn sws_send_slice( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - slice_start: c_uint, - slice_height: c_uint, -) -> c_int: - return external_call["sws_send_slice", c_int]( - ctx, slice_start, slice_height - ) - - -fn sws_receive_slice( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - slice_start: c_uint, - slice_height: c_uint, -) -> c_int: - return external_call["sws_receive_slice", c_int]( - ctx, slice_start, slice_height - ) - - -fn sws_receive_slice_alignment( - ctx: UnsafePointer[SwsContext, ImmutExternalOrigin] -) -> c_uint: - return external_call["sws_receive_slice_alignment", c_uint](ctx) - - -fn sws_setColorspaceDetails( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - inv_table: UnsafePointer[c_int, ImmutExternalOrigin], - srcRange: c_int, - table: UnsafePointer[c_int, ImmutExternalOrigin], - dstRange: c_int, - brightness: c_int, - contrast: c_int, - saturation: c_int, -) -> c_int: - return external_call["sws_setColorspaceDetails", c_int]( - ctx, - inv_table, - srcRange, - table, - dstRange, - brightness, - contrast, - saturation, - ) - - -fn sws_allocVec(length: c_int) -> UnsafePointer[SwsVector, MutExternalOrigin]: - return external_call[ - "sws_allocVec", UnsafePointer[SwsVector, MutExternalOrigin] - ](length) - - -fn sws_getGaussianVec( - variance: c_double, quality: c_double -) -> UnsafePointer[SwsVector, MutExternalOrigin]: - return external_call[ - "sws_getGaussianVec", UnsafePointer[SwsVector, MutExternalOrigin] - ](variance, quality) - - -fn sws_scaleVec( - a: UnsafePointer[SwsVector, MutExternalOrigin], scalar: c_double -): - external_call["sws_scaleVec", NoneType](a, scalar) - - -fn sws_normalizeVec( - a: UnsafePointer[SwsVector, MutExternalOrigin], height: c_double -): - external_call["sws_normalizeVec", NoneType](a, height) - - -fn sws_freeVec(a: UnsafePointer[SwsVector, MutExternalOrigin]): - external_call["sws_freeVec", NoneType](a) - - -fn sws_getDefaultFilter( - lumaGBlur: c_float, - chromaGBlur: c_float, - lumaSharpen: c_float, - chromaSharpen: c_float, - chromaHShift: c_float, - chromaVShift: c_float, - verbose: c_int, -) -> UnsafePointer[SwsFilter, MutExternalOrigin]: - return external_call[ - "sws_getDefaultFilter", UnsafePointer[SwsFilter, MutExternalOrigin] - ]( - lumaGBlur, - chromaGBlur, - lumaSharpen, - chromaSharpen, - chromaHShift, - chromaVShift, - verbose, - ) - - -fn sws_freeFilter(filter: UnsafePointer[SwsFilter, MutExternalOrigin]): - external_call["sws_freeFilter", NoneType](filter) - - -fn sws_getCachedContext( - ctx: UnsafePointer[SwsContext, MutExternalOrigin], - srcW: c_int, - srcH: c_int, - srcFormat: AVPixelFormat.ENUM_DTYPE, - dstW: c_int, - dstH: c_int, - dstFormat: AVPixelFormat.ENUM_DTYPE, - flags: c_int, - srcFilter: UnsafePointer[SwsFilter, MutExternalOrigin], - dstFilter: UnsafePointer[SwsFilter, MutExternalOrigin], - param: UnsafePointer[c_double, ImmutExternalOrigin], -) -> UnsafePointer[SwsContext, MutExternalOrigin]: - return external_call[ - "sws_getCachedContext", UnsafePointer[SwsContext, MutExternalOrigin] - ]( - ctx, - srcW, - srcH, - srcFormat, - dstW, - dstH, - dstFormat, - flags, - srcFilter, - dstFilter, - param, - ) - - -fn sws_convertPalette8ToPacked32( - src: UnsafePointer[c_uchar, ImmutExternalOrigin], - dst: UnsafePointer[c_uchar, MutExternalOrigin], - num_pixels: c_int, - palette: UnsafePointer[c_uchar, ImmutExternalOrigin], -): - external_call["sws_convertPalette8ToPacked32", NoneType]( - src, dst, num_pixels, palette - ) - - -fn sws_convertPalette8ToPacked24( - src: UnsafePointer[c_uchar, ImmutExternalOrigin], - dst: UnsafePointer[c_uchar, MutExternalOrigin], - num_pixels: c_int, - palette: UnsafePointer[c_uchar, ImmutExternalOrigin], -): - external_call["sws_convertPalette8ToPacked24", NoneType]( - src, dst, num_pixels, palette - ) diff --git a/ash_dynamics/image/io.mojo b/ash_dynamics/image/io.mojo index 7f900c6..ee47992 100644 --- a/ash_dynamics/image/io.mojo +++ b/ash_dynamics/image/io.mojo @@ -1,23 +1,23 @@ from std.ffi import c_uchar, c_char, c_int, c_long_long from std.sys._libc_errno import ErrNo from std.pathlib import Path -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg import avformat -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg import swscale -from ash_dynamics.ffmpeg import swrsample -from ash_dynamics.ffmpeg.avformat import AVFormatContext -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE +from mav.ffmpeg.avcodec.packet import AVPacket +from mav.ffmpeg import avformat +from mav.ffmpeg import avcodec +from mav.ffmpeg import avutil +from mav.ffmpeg import swscale +from mav.ffmpeg import swrsample +from mav.ffmpeg.avformat import AVFormatContext +from mav.ffmpeg.avutil.dict import AVDictionary +from mav.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE +from mav.ffmpeg.avutil.avutil import AV_NOPTS_VALUE from std.memory import memset -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from logger.logger import Logger, Level, DEFAULT_LEVEL +from mav.ffmpeg.avcodec.avcodec import AVCodecContext +from mav.ffmpeg.avutil.frame import AVFrame +from mav.ffmpeg.avutil.error import AVERROR, AVERROR_EOF +from mav.ffmpeg.avutil.pixfmt import AVPixelFormat +from mav.ffmpeg.avutil.rational import AVRational +from std.logger.logger import Logger, Level, DEFAULT_LEVEL from std.testing import assert_equal diff --git a/ash_dynamics/primitives/_clib.mojo b/ash_dynamics/primitives/_clib.mojo deleted file mode 100644 index efd1bfc..0000000 --- a/ash_dynamics/primitives/_clib.mojo +++ /dev/null @@ -1,138 +0,0 @@ -from std.ffi import ( - OwnedDLHandle, - c_char, - c_int, - c_long_long, - c_uchar, - c_uint, - c_ushort, -) -from std.sys.info import size_of -from std.utils import StaticTuple -from std.sys.intrinsics import _type_is_eq -from builtin.rebind import downcast -from std.reflection import ( - struct_field_count, - struct_field_names, - struct_field_types, - get_type_name, -) - - -comptime c_ptrdiff_t = c_long_long - - -struct ExternalFunction[ - name: StaticString, - type: __TypeOfAllTypes, -]: - """Loads external functions from a dynamic library. - - References: - - https://github.com/modular/modular/blob/d2dadf1a723d7e341f84d34e93223517b23bfca3/mojo/stdlib/stdlib/python/_cpython.mojo#L756 - """ - - @staticmethod - @always_inline - fn load(lib: OwnedDLHandle) -> Self.type: - """Loads this external function from an opened dynamic library.""" - return lib._get_function[Self.name, Self.type]() - - -@always_inline("nodebug") -fn build_union_mlir_type[*Ts: Copyable & Movable]() -> Int: - var max_size: Int = 0 - - comptime for i in range(Variadic.size(Ts)): - comptime current_size = size_of[Ts[i]]() - if current_size > max_size: - max_size = current_size - return max_size - - -# TODO(josiahls): We absolutely can't do it this way as a long term thing. -@fieldwise_init("implicit") -struct C_Union[*Ts: Copyable & Movable]( - Copyable, Movable, TrivialRegisterPassable -): - """ - A union that can hold a runtime-variant value from a set of predefined - types. - - Reference: https://en.cppreference.com/w/c/language/union.html - - `C_Union` expects the types to overlap in storage. It is only as big as its - largest member. It provides no additional tracking or memory management unlike - `Variant` which is a discriminated union type that maintains a tracking discriminant. - """ - - comptime max_size = build_union_mlir_type[*Self.Ts]() - var _impl: StaticTuple[UInt8, Self.max_size] - - @implicit - fn __init__[T: Movable](out self, var value: T): - """Create a c union with one of the types. - - Parameters: - T: The type to initialize the variant to. Generally this should - be able to be inferred from the call type, eg. `C_Union[Int, String](4)`. - - Args: - value: The value to initialize the variant with. - """ - __mlir_op.`lit.ownership.mark_initialized`(__get_mvalue_as_litref(self)) - self._get_ptr[T]().init_pointee_move(value^) - - @staticmethod - fn _check[T: AnyType]() -> Bool: - comptime for i in range(Variadic.size(Self.Ts)): - if _type_is_eq[Self.Ts[i], T](): - return True - return False - - @always_inline("nodebug") - fn _get_ptr[ - T: AnyType - ](mut self) -> UnsafePointer[T, origin_of(self._impl)]: - comptime is_supported = Self._check[T]() - comptime assert is_supported, "not a union element type" - var ptr = UnsafePointer(to=self._impl).bitcast[T]() - return ptr - - -struct TrivialOptionalField[active: Bool, ElementType: __TypeOfAllTypes]( - Copyable, Movable, Writable -): - comptime OptionalElementType = StaticTuple[ - Self.ElementType, 1 if Self.active else 0 - ] - var field: Self.OptionalElementType - - fn __init__(out self): - comptime assert ( - not Self.active - ), "Constructor only available with no active field" - self.field = Self.OptionalElementType() - - fn __init__(out self, var value: Self.ElementType): - comptime assert ( - Self.active - ), "Constructor only available with active field" - self.field = Self.OptionalElementType(value) - - fn __init__(out self, var value: Optional[Self.ElementType]): - comptime if Self.active: - self.field = Self.OptionalElementType(value.take()) - else: - self.field = Self.OptionalElementType() - - fn write_to(self, mut writer: Some[Writer]): - comptime if Self.active and conforms_to(Self.ElementType, Writable): - writer.write(trait_downcast[Writable](self[])) - - @always_inline - fn __getitem__(ref self) -> Self.ElementType: - comptime assert ( - Self.active - ), "Field is not active, you should not access it." - return self.field[0] diff --git a/ash_dynamics/primitives/image.mojo b/ash_dynamics/primitives/image.mojo index 40e7ae3..d90480b 100644 --- a/ash_dynamics/primitives/image.mojo +++ b/ash_dynamics/primitives/image.mojo @@ -2,23 +2,7 @@ from std.ffi import c_uchar, c_char, c_int from std.sys._libc_errno import ErrNo from std.pathlib import Path from std.os import abort -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avformat import Avformat -from ash_dynamics.ffmpeg.avcodec import Avcodec -from ash_dynamics.ffmpeg.avutil import Avutil -from ash_dynamics.ffmpeg.swscale import Swscale -from ash_dynamics.ffmpeg.swrsample import Swrsample -from ash_dynamics.ffmpeg.avformat import AVFormatContext -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE -from std.memory import memset -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat - - +from mav.ffmpeg.avutil.pixfmt import AVPixelFormat from ash_dynamics.image.io import image_save, image_read, ImageData @@ -36,44 +20,6 @@ struct ImageInfo: self.n_color_spaces = 0 -fn decode( - mut avcodec: Avcodec, - dec_ctx: UnsafePointer[AVCodecContext, origin=MutExternalOrigin], - frame: UnsafePointer[AVFrame, origin=MutExternalOrigin], - pkt: UnsafePointer[AVPacket, origin=MutExternalOrigin], - filename: String, - mut image_info: ImageInfo, -) raises -> UnsafePointer[c_uchar, MutExternalOrigin]: - var ret: c_int = avcodec.avcodec_send_packet(dec_ctx, pkt) - if ret < 0: - abort("Error sending a packaet for decoding.") - else: - print("Packet sent successfully.") - - while ret >= 0: - ret = avcodec.avcodec_receive_frame(dec_ctx, frame) - if ret == AVERROR(ErrNo.EAGAIN.value) or ret == Int32(AVERROR_EOF): - break - elif ret < 0: - abort("Error receiving frame.") - else: - print("Frame received successfully.") - - image_info.width = frame[].width - image_info.height = frame[].height - image_info.format = dec_ctx[].pix_fmt - image_info.n_color_spaces = dec_ctx[].color_range - - out_data = alloc[c_uchar]( - Int(frame[].linesize[0]) * Int(frame[].height) - ) - out_data[] = frame[].data[0][] - - return out_data - - raise Error("Error decoding image.") - - struct Image(Movable, Writable): var _data: UnsafePointer[c_uchar, MutAnyOrigin] diff --git a/pixi.lock b/pixi.lock index 0eec056..692ed81 100644 --- a/pixi.lock +++ b/pixi.lock @@ -15,6 +15,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda @@ -35,6 +36,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.5-h2b0a6b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.53.0-pl5321h6d3cee1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda @@ -58,12 +60,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcbor-0.10.2-hcb278e6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfido2-1.16.0-h5da5774_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda @@ -81,6 +87,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda @@ -103,6 +110,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda @@ -119,6 +127,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda @@ -134,11 +143,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssh-10.2p1-hcbcca31_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda @@ -198,6 +209,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda @@ -218,6 +230,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/git-2.53.0-pl5321h5dcfaa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda @@ -238,12 +251,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcbor-0.9.0-h01db608_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.19.0-hc57f145_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfido2-1.16.0-h91d4d87_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda @@ -261,6 +278,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda @@ -281,6 +299,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda @@ -295,6 +314,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda @@ -308,11 +328,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssh-10.2p1-he095e0c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda @@ -379,6 +401,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda @@ -399,6 +422,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.5-h2b0a6b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.53.0-pl5321h6d3cee1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda @@ -422,12 +446,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcbor-0.10.2-hcb278e6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfido2-1.16.0-h5da5774_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda @@ -445,6 +473,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda @@ -467,6 +496,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda @@ -483,6 +513,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda @@ -498,11 +529,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssh-10.2p1-hcbcca31_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda @@ -562,6 +595,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda @@ -582,6 +616,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/git-2.53.0-pl5321h5dcfaa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda @@ -602,12 +637,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcbor-0.9.0-h01db608_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.19.0-hc57f145_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfido2-1.16.0-h91d4d87_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda @@ -625,6 +664,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda @@ -645,6 +685,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda @@ -659,6 +700,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda @@ -672,11 +714,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssh-10.2p1-he095e0c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda @@ -841,6 +885,25 @@ packages: license_family: BSD size: 192412 timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + size: 207882 + timestamp: 1765214722852 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda + sha256: 7ec8a68efe479e2e298558cbc2e79d29430d5c7508254268818c0ae19b206519 + md5: 1dfbec0d08f112103405756181304c16 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + size: 217215 + timestamp: 1765214743735 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc md5: 4492fd26db29495f0ba23f146cd5638d @@ -1258,6 +1321,38 @@ packages: license_family: LGPL size: 584221 timestamp: 1771532437279 +- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.53.0-pl5321h6d3cee1_0.conda + sha256: 33b20cf09ff1c6ca960e6c5f7fad1f08ffd3112a87d79e42ed56f4e1b4cdefe3 + md5: ad8d4260a6dae5f55960b26b237d576b + depends: + - __glibc >=2.28,<3.0.a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + size: 11447951 + timestamp: 1770982660115 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/git-2.53.0-pl5321h5dcfaa0_0.conda + sha256: dc3aa2ca7d4abbbb2908fb7c703746daef4b5d7e727abed8e7e1778bcdcfd15a + md5: d8ef509ae5c63dc64d81edad820dfd4c + depends: + - __glibc >=2.28,<3.0.a0 + - libcurl >=8.18.0,<9.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + size: 14338508 + timestamp: 1770986540132 - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda sha256: 88a5ad3571948bde22957d08ab01328b8a7eb04fdee66268b3125cc322dbde8b md5: ba5b655d827f263090ad2dc514810328 @@ -1713,6 +1808,57 @@ packages: license_family: BSD size: 108542 timestamp: 1762350753349 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcbor-0.10.2-hcb278e6_0.conda + sha256: bdad0f4a40365a4f5a4b192ff74d39c8c4036d2dd32cfa592e80533c3dcab7e4 + md5: 1cd4da6255c707d846e07fe30faf3c12 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 42794 + timestamp: 1675231959207 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcbor-0.9.0-h01db608_0.tar.bz2 + sha256: 0af09220fa5143dc0c2fd537cb5b26bb0ae767a93c096e17ee56df473fffbfa9 + md5: 068b7be377f2863e1ffadb0e0b10c138 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: MIT + license_family: MIT + size: 44574 + timestamp: 1636966844440 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4 + md5: d50608c443a30c341c24277d28290f76 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + size: 466704 + timestamp: 1773218522665 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.19.0-hc57f145_0.conda + sha256: 75c1b2f9cff7598c593dda96c55963298bebb5bcb5a77af0b4c41cb03d26100b + md5: d5306c7ec07faf48cfb0e552c67339e0 + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + size: 485694 + timestamp: 1773218484057 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 md5: 6c77a605a7a689d17d4819c0f8ac9a00 @@ -1793,6 +1939,24 @@ packages: license: LicenseRef-libglvnd size: 53551 timestamp: 1731330990477 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + sha256: 973af77e297f1955dd1f69c2cbdc5ab9dfc88388a5576cd152cda178af0fd006 + md5: a9a13cb143bbaa477b1ebaefbe47a302 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 115123 + timestamp: 1702146237623 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 @@ -1835,6 +1999,35 @@ packages: license_family: MIT size: 55952 timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfido2-1.16.0-h5da5774_0.conda + sha256: 17536a75dcacc50453835c5b500ed8e6f022377a5c056c5aeb9c7b554dda8229 + md5: 24e622494a0013a92f14b67a8ef6c0cf + depends: + - __glibc >=2.17,<3.0.a0 + - libcbor >=0.10.2,<0.11.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libudev1 >=257.7 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: BSD-2-Clause + license_family: BSD + size: 274954 + timestamp: 1754923702054 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfido2-1.16.0-h91d4d87_0.conda + sha256: 7a7bc0dd358899774d0861712a07757e29a9c300f38d645179290d94e24aa390 + md5: 841cf634e3608b11988d0ab7779a62b3 + depends: + - libcbor >=0.9.0,<0.10.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libudev1 >=257.7 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: BSD-2-Clause + license_family: BSD + size: 290434 + timestamp: 1754923772713 - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda sha256: e755e234236bdda3d265ae82e5b0581d259a9279e3e5b31d745dc43251ad64fb md5: 47595b9d53054907a00d95e4d47af1d6 @@ -2190,6 +2383,37 @@ packages: license_family: BSD size: 114056 timestamp: 1769482343003 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + sha256: a4a7dab8db4dc81c736e9a9b42bdfd97b087816e029e221380511960ac46c690 + md5: b499ce4b026493a13774bcf0f4c33849 + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.5,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: MIT + license_family: MIT + size: 666600 + timestamp: 1756834976695 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda + sha256: b03f406fd5c3f865a5e08c89b625245a9c4e026438fd1a445e45e6a0d69c2749 + md5: 981082c1cc262f514a5a2cf37cab9b81 + depends: + - c-ares >=1.34.5,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: MIT + license_family: MIT + size: 728661 + timestamp: 1756835019535 - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda sha256: ffb066ddf2e76953f92e06677021c73c85536098f1c21fcd15360dbc859e22e4 md5: 68e52064ed3897463c0e958ab5c8f91b @@ -2718,6 +2942,29 @@ packages: license: blessing size: 952296 timestamp: 1772818881550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 304790 + timestamp: 1745608545575 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda + sha256: 1e289bcce4ee6a5817a19c66e296f3c644dcfa6e562e5c1cba807270798814e7 + md5: eecc495bcfdd9da8058969656f916cc2 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 311396 + timestamp: 1745609845915 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -3067,6 +3314,22 @@ packages: license_family: MIT size: 397493 timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 @@ -3343,6 +3606,35 @@ packages: license_family: BSD size: 774512 timestamp: 1739400731652 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssh-10.2p1-hcbcca31_1.conda + sha256: 2fd012656a08e74625ede55d168095947a7805ffaef2a5bcd3963f6114f121f4 + md5: ea4c268af29433d529d664553b069be2 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libfido2 >=1.16.0,<2.0a0 + - libgcc >=14 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: SSH-OpenSSH + size: 1107720 + timestamp: 1770892649447 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssh-10.2p1-he095e0c_1.conda + sha256: 8d49533d95019b262be75afa2d5081f192de6da950b83b3f7ee284f55b607573 + md5: 26a4ee7aed193da219636ecca98b0876 + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libfido2 >=1.16.0,<2.0a0 + - libgcc >=14 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: SSH-OpenSSH + size: 1354911 + timestamp: 1770892658148 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -3445,6 +3737,26 @@ packages: license_family: BSD size: 1166552 timestamp: 1763655534263 +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + build_number: 7 + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 + md5: f2cfec9406850991f4e3d960cc9e3321 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 13344463 + timestamp: 1703310653947 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda + build_number: 7 + sha256: d78296134263b5bf476cad838ded65451e7162db756f9997c5d06b08122572ed + md5: 17d019cb2a6c72073c344e98e40dfd61 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 13338804 + timestamp: 1703310557094 - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a md5: c01af13bdc553d1a8fbfff6e8db075f0 diff --git a/pixi.toml b/pixi.toml index 12944c3..f166a27 100644 --- a/pixi.toml +++ b/pixi.toml @@ -22,6 +22,9 @@ pre-commit = ">=4.5.0,<5" # Pin to LGPL build (no libx264/libx265) to avoid GPL copyleft ffmpeg = { version = "==8.0.1", build = "*lgpl*" } openh264 = "==2.6.0" +# ffmpeg has zlib version restrictions, thus can conflict with git. +git = ">=2.53.0" +openssh = ">=9.0" [activation.env] @@ -39,17 +42,6 @@ install_pre_commit_hooks = { cmd = [ "pre-commit", "install" ], outputs = [".git/hooks/pre-commit"]} -# Note: This should be in the third_party setup directory, but pixi's support -# for outputs in its written out form isn't supported. -build_ffmpeg = { cmd = "bash tools/build_ffmpeg.sh", inputs = [ - "tools/build_ffmpeg.sh", -], outputs = [ - "third_party/ffmpeg/build/lib/*.so" -], depends-on = [ "clone_ffmpeg", "install_libopenh264" ] } - -# Same as above, however will run every time. -build_ffmpeg_clean = { cmd = "FORCE_FFMPEG_BUILD=true bash tools/build_ffmpeg.sh", depends-on = [ "clone_ffmpeg", "install_libopenh264" ] } - ############################ Git Ops ########################################### push = "git push --force-with-lease" @@ -64,15 +56,13 @@ cmd = "bash tools/clone_lightbug_http.sh" [tasks.clone_numojo] cmd = "bash tools/clone_numojo.sh" -[tasks.clone_ffmpeg] -cmd = "bash tools/clone_ffmpeg.sh" - -[tasks.install_libopenh264] -cmd = "bash tools/install_libopenh264.sh" - [tasks.clone_mav] cmd = "bash tools/clone_mav.sh" +[tasks.configure_mav] +cmd = "cd third_party/mav && pixi shell && pixi run configure" +depends-on = [ "clone_mav" ] + ############################### Env setup ###################################### [tasks.configure_lldb] @@ -85,7 +75,7 @@ cmd = "bash tools/generate_test_videos.sh" ############################### Core API ####################################### [tasks.configure] cmd = "bash tools/configure.sh" -depends-on = [ "install_pre_commit_hooks", "clone_lightbug_http", "build_ffmpeg", "generate_test_videos", "install_libopenh264", "clone_numojo", "clone_mav" ] +depends-on = [ "install_pre_commit_hooks", "clone_lightbug_http", "generate_test_videos", "clone_numojo", "configure_mav" ] [tasks.package] cmd = "pixi run mojo package $ASH_DYNAMICS_INCLUDES ash_dynamics" @@ -125,6 +115,11 @@ cmd = "pixi run mojo debug ./$(tools/mojo_build_ex.sh {{ file }})" args = ["file"] depends-on = [ "configure_lldb" ] +[tasks.idebug] +cmd = "pixi run mojo debug --vscode ./$(tools/mojo_build_ex.sh {{ file }})" +args = ["file"] +depends-on = [ "configure_lldb" ] + [tasks.test] args = ["file"] depends-on = [ diff --git a/serve_dash.py b/serve_dash.py index fd39129..39f8ca6 100644 --- a/serve_dash.py +++ b/serve_dash.py @@ -14,7 +14,7 @@ import mimetypes import os - +#ci trigger # Change this to "dash" or "dash_from_c" to switch which set you serve. SERVE_SUBDIR = "dash_mojo" # or "dash_from_c" @@ -24,7 +24,7 @@ class DashRequestHandler(SimpleHTTPRequestHandler): # Root directory of the repo: one level up from this file. repo_root = Path(__file__).resolve().parent - serve_root = repo_root / "test_data" / SERVE_SUBDIR + serve_root = repo_root / "third_party/mav/test_data" / SERVE_SUBDIR def translate_path(self, path: str) -> str: # Strip leading slash and map to serve_root. diff --git a/tests/test_ffmpeg/test_avcodec/test_avcodec.mojo b/tests/test_ffmpeg/test_avcodec/test_avcodec.mojo deleted file mode 100644 index 3ac6f8f..0000000 --- a/tests/test_ffmpeg/test_avcodec/test_avcodec.mojo +++ /dev/null @@ -1,492 +0,0 @@ -from std.testing import TestSuite, assert_equal, assert_true -from std.memory import alloc, memset -from std.ffi import c_int, c_char, c_uchar, c_long_long, c_size_t - -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext, AVSubtitle -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg.avutil.channel_layout import AV_CHANNEL_LAYOUT_STEREO - - -def test_codec_id() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - ctx_ptr.free() - - -def test_avcodec_version() raises: - var ver = avcodec.avcodec_version() - assert_true(ver >= 0) - - -def test_avcodec_configuration() raises: - var cfg = avcodec.avcodec_configuration() - assert_true(Bool(cfg)) - - -def test_avcodec_license() raises: - var lic = avcodec.avcodec_license() - assert_true(Bool(lic)) - - -def test_avcodec_alloc_context3() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - assert_true(Bool(codec)) - var ctx = avcodec.avcodec_alloc_context3(codec) - assert_true(Bool(ctx)) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_free_context() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_get_class() raises: - var cls = avcodec.avcodec_get_class() - assert_true(Bool(cls)) - - -def test_avcodec_get_subtitle_rect_class() raises: - var cls = avcodec.avcodec_get_subtitle_rect_class() - assert_true(Bool(cls)) - - -def test_avcodec_parameters_from_context() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 320 - ctx[].height = 240 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - ctx[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - - # var dict = alloc[AVDictionary](0) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - # dict_ptr[] = dict - - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var par = alloc[AVCodecParameters](1) - memset(par, 0, 1) - var ret = avcodec.avcodec_parameters_from_context( - par, - ctx.as_immutable(), - ) - assert_equal(ret, 0) - assert_equal(par[].width, 320) - assert_equal(par[].height, 240) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_parameters_to_context() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var par = alloc[AVCodecParameters](1) - memset(par, 0, 1) - par[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - par[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - par[].width = 320 - par[].height = 240 - var ret = avcodec.avcodec_parameters_to_context( - ctx, - par.as_immutable(), - ) - assert_equal(ret, 0) - assert_equal(ctx[].width, 320) - assert_equal(ctx[].height, 240) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_open2() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - # var dict = alloc[AVDictionary](0) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - # dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avsubtitle_free() raises: - var sub = alloc[AVSubtitle](1) - memset(sub, 0, 1) - avcodec.avsubtitle_free(sub) - - -def test_avcodec_send_packet() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var null_pkt = UnsafePointer[AVPacket, MutExternalOrigin]() - var ret = avcodec.avcodec_send_packet(ctx, null_pkt) - assert_equal(ret, 0) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_receive_frame() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var frame = avutil.av_frame_alloc() - var ret = avcodec.avcodec_receive_frame(ctx, frame) - _ = ret - var frame_ptr = alloc[UnsafePointer[AVFrame, MutExternalOrigin]](1) - frame_ptr[] = frame - avutil.av_frame_free(frame_ptr) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_send_frame() raises: - var codec = avcodec.avcodec_find_encoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 320 - ctx[].height = 240 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - ctx[].time_base = AVRational(num=1, den=25) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var null_frame = UnsafePointer[AVFrame, ImmutExternalOrigin]() - var ret = avcodec.avcodec_send_frame(ctx, null_frame) - assert_equal(ret, 0) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_receive_packet() raises: - var codec = avcodec.avcodec_find_encoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 320 - ctx[].height = 240 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - ctx[].time_base = AVRational(num=1, den=25) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var pkt = avcodec.av_packet_alloc() - var ret = avcodec.avcodec_receive_packet(ctx, pkt) - _ = ret - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = pkt - avcodec.av_packet_free(pkt_ptr) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_align_dimensions() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 321 - ctx[].height = 241 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var w = alloc[c_int](1) - var h = alloc[c_int](1) - w[0] = 321 - h[0] = 241 - _ = avcodec.avcodec_align_dimensions(ctx, w, h) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_align_dimensions2() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 321 - ctx[].height = 241 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var w = alloc[c_int](1) - var h = alloc[c_int](1) - var linesize = alloc[c_int](16) - memset(linesize, 0, 16) - w[0] = 321 - h[0] = 241 - _ = avcodec.avcodec_align_dimensions2(ctx, w, h, linesize) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_default_get_buffer2() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 320 - ctx[].height = 240 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var frame = avutil.av_frame_alloc() - frame[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - frame[].width = 320 - frame[].height = 240 - var ret = avcodec.avcodec_default_get_buffer2(ctx, frame, 0) - assert_equal(ret, 0) - var frame_ptr = alloc[UnsafePointer[AVFrame, MutExternalOrigin]](1) - frame_ptr[] = frame - avutil.av_frame_free(frame_ptr) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_default_get_encode_buffer() raises: - var codec = avcodec.avcodec_find_encoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - ctx[].width = 320 - ctx[].height = 240 - ctx[].pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P._value - ctx[].time_base = AVRational(num=1, den=25) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var pkt = avcodec.av_packet_alloc() - var ret = avcodec.avcodec_default_get_encode_buffer(ctx, pkt, 0) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = pkt - avcodec.av_packet_free(pkt_ptr) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_default_get_format() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var fmt_list = alloc[AVPixelFormat.ENUM_DTYPE](2) - fmt_list[0] = AVPixelFormat.AV_PIX_FMT_YUV420P._value - fmt_list[1] = AVPixelFormat.AV_PIX_FMT_NONE._value - var ret = avcodec.avcodec_default_get_format( - ctx, - fmt_list.as_immutable(), - ) - assert_equal(ret, AVPixelFormat.AV_PIX_FMT_YUV420P._value) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_av_parser_parse2() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var parser = avcodec.av_parser_init(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var poutbuf = alloc[UnsafePointer[c_uchar, MutExternalOrigin]](1) - poutbuf[0] = UnsafePointer[c_uchar, MutExternalOrigin]() - var poutbuf_size = alloc[c_int](1) - poutbuf_size[0] = 0 - var buf = alloc[c_uchar](64) - memset(buf, 0, 64) - var ret = avcodec.av_parser_parse2( - parser, - ctx, - poutbuf, - poutbuf_size, - buf, - 64, - c_long_long(-1), - c_long_long(-1), - c_long_long(-1), - ) - _ = ret - avcodec.av_parser_close(parser) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_fill_audio_frame() raises: - var frame = avutil.av_frame_alloc() - frame[].format = AVSampleFormat.AV_SAMPLE_FMT_S16._value - frame[].nb_samples = 1024 - frame[].ch_layout = AV_CHANNEL_LAYOUT_STEREO - var buf = alloc[c_uchar](4096) - memset(buf, 0, 4096) - var ret = avcodec.avcodec_fill_audio_frame( - frame, - 2, - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - buf, - 4096, - 0, - ) - # Returns buffer size (bytes filled) on success, negative AVERROR on failure - assert_equal(ret, 4096) - # Clear frame data before free - avcodec_fill_audio_frame sets data to our buffer. - # Must unref first so av_frame_free (which receives frame* but C expects frame**) - # does not try to free our Mojo-allocated buffer. - avutil.av_frame_unref(frame) - var frame_ptr = alloc[UnsafePointer[AVFrame, MutExternalOrigin]](1) - frame_ptr[] = frame - avutil.av_frame_free(frame_ptr) - - -def test_av_parser_iterate() raises: - var opaque = alloc[OpaquePointer[MutExternalOrigin]](1) - memset(opaque, 0, 1) - var count = 0 - while True: - var parser = avcodec.av_parser_iterate( - opaque, - ) - if not Bool(parser): - break - count += 1 - assert_true(count > 0) - - -def test_av_parser_init() raises: - var parser = avcodec.av_parser_init(AVCodecID.AV_CODEC_ID_H264._value) - assert_true(Bool(parser)) - avcodec.av_parser_close(parser) - - -def test_av_parser_close() raises: - var parser = avcodec.av_parser_init(AVCodecID.AV_CODEC_ID_H264._value) - avcodec.av_parser_close(parser) - - -def test_avcodec_pix_fmt_to_codec_tag() raises: - var tag = avcodec.avcodec_pix_fmt_to_codec_tag( - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - ) - _ = tag - - -def test_avcodec_find_best_pix_fmt_of_list() raises: - var list = alloc[AVPixelFormat.ENUM_DTYPE](4) - list[0] = AVPixelFormat.AV_PIX_FMT_YUV420P._value - list[1] = AVPixelFormat.AV_PIX_FMT_YUV422P._value - list[2] = AVPixelFormat.AV_PIX_FMT_YUV444P._value - list[3] = AVPixelFormat.AV_PIX_FMT_NONE._value - var loss = alloc[c_int](1) - loss[0] = 0 - var best = avcodec.avcodec_find_best_pix_fmt_of_list( - list.as_immutable(), - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 0, - loss, - ) - assert_equal(best, AVPixelFormat.AV_PIX_FMT_YUV420P._value) - - -def test_avcodec_string() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var buf = alloc[c_char](256) - memset(buf, 0, 256) - avcodec.avcodec_string( - buf, - 256, - ctx.as_immutable(), - 0, - ) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_flush_buffers() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - avcodec.avcodec_flush_buffers(ctx) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_av_get_audio_frame_duration() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_MP3._value) - if not Bool(codec): - return - var ctx = avcodec.avcodec_alloc_context3(codec) - var dur = avcodec.av_get_audio_frame_duration( - ctx.as_immutable(), - 0, - ) - _ = dur - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def test_avcodec_is_open() raises: - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - var ctx = avcodec.avcodec_alloc_context3(codec) - var open_before = avcodec.avcodec_is_open( - ctx.as_immutable(), - ) - assert_equal(open_before, 0) - var dict = UnsafePointer[AVDictionary, MutExternalOrigin]() - var dict_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr[] = dict - _ = avcodec.avcodec_open2(ctx, codec, dict_ptr) - var open_after = avcodec.avcodec_is_open( - ctx.as_immutable(), - ) - assert_equal(open_after, 1) - var ctx_ptr = alloc[UnsafePointer[AVCodecContext, MutExternalOrigin]](1) - ctx_ptr[0] = ctx - avcodec.avcodec_free_context(ctx_ptr) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avcodec/test_codec.mojo b/tests/test_ffmpeg/test_avcodec/test_codec.mojo deleted file mode 100644 index ff8a4ae..0000000 --- a/tests/test_ffmpeg/test_avcodec/test_codec.mojo +++ /dev/null @@ -1,110 +0,0 @@ -from std.testing import TestSuite, assert_equal, assert_true -from std.memory import alloc, memset - -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID - - -def test_avcodec_find_encoder() raises: - var codec = avcodec.avcodec_find_encoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(codec)) - - -def test_av_codec_iterate() raises: - var opaque = alloc[OpaquePointer[MutExternalOrigin]](1) - memset(opaque, 0, 1) - var count = 0 - while True: - var codec = avcodec.av_codec_iterate( - opaque, - ) - if not Bool(codec): - break - count += 1 - assert_true(count > 0) - - -def test_avcodec_find_decoder_by_name() raises: - var name = String("h264") - var codec = avcodec.avcodec_find_decoder_by_name(name) - assert_true(Bool(codec)) - - -def test_avcodec_find_encoder_by_name() raises: - var name = String("mpeg4") - var codec = avcodec.avcodec_find_encoder_by_name(name) - assert_true(Bool(codec)) - - -def test_av_codec_is_encoder() raises: - var encoder = avcodec.avcodec_find_encoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(encoder)) - var is_enc = avcodec.av_codec_is_encoder( - encoder.as_immutable(), - ) - assert_equal(is_enc, 1) - var decoder = avcodec.avcodec_find_decoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(decoder)) - is_enc = avcodec.av_codec_is_encoder( - decoder.as_immutable(), - ) - assert_equal(is_enc, 0) - - -def test_av_codec_is_decoder() raises: - var decoder = avcodec.avcodec_find_decoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(decoder)) - var is_dec = avcodec.av_codec_is_decoder( - decoder.as_immutable(), - ) - assert_equal(is_dec, 1) - var encoder = avcodec.avcodec_find_encoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(encoder)) - is_dec = avcodec.av_codec_is_decoder( - encoder.as_immutable(), - ) - assert_equal(is_dec, 0) - - -def test_av_get_profile_name() raises: - var codec = avcodec.avcodec_find_decoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(codec)) - var name = avcodec.av_get_profile_name( - codec.as_immutable(), - -99, - ) - var name_main = avcodec.av_get_profile_name( - codec.as_immutable(), - 66, - ) - _ = name - _ = name_main - - -def test_avcodec_get_hw_config() raises: - var codec = avcodec.avcodec_find_decoder( - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_true(Bool(codec)) - var config = avcodec.avcodec_get_hw_config( - codec.as_immutable(), - 0, - ) - _ = config - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avcodec/test_codec_id.mojo b/tests/test_ffmpeg/test_avcodec/test_codec_id.mojo deleted file mode 100644 index 61a7000..0000000 --- a/tests/test_ffmpeg/test_avcodec/test_codec_id.mojo +++ /dev/null @@ -1,85 +0,0 @@ -from std.testing import TestSuite, assert_equal -from std.memory import memset -from std.ffi import c_uchar, c_int, c_char -from std.sys._libc_errno import ErrNo - -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.buffer_internal import AVBuffer -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.packet import ( - AVPacketSideData, - AVPacketSideDataType, -) -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF - - -def test_codec_id() raises: - # NOTE: May need to have this test adjust depending on FFmpeg versions. - # Note: This test assumes all of the flags in the xors are true - assert_equal(AVCodecID.AV_CODEC_ID_MPEG1VIDEO._value, 1) - assert_equal(AVCodecID.AV_CODEC_ID_MPEG2VIDEO._value, 2) - assert_equal(AVCodecID.AV_CODEC_ID_H264._value, 27) - # 1st macro alias another enum field - assert_equal(AVCodecID.AV_CODEC_ID_IFF_BYTERUN1._value, 136) - # 2nd macro that optionally inserts AV_CODEC_ID_V410 as a field. - assert_equal(AVCodecID.AV_CODEC_ID_V410._value, 156) - assert_equal(AVCodecID.AV_CODEC_ID_XWD._value, 157) - # 3rd macro alias another enum field - assert_equal(AVCodecID.AV_CODEC_ID_H265._value, 173) - # 4th macro alias another enum field - assert_equal(AVCodecID.AV_CODEC_ID_H266._value, 196) - assert_equal(AVCodecID.AV_CODEC_ID_TARGA_Y216._value, 201) - assert_equal(AVCodecID.AV_CODEC_ID_V308._value, 202) - assert_equal(AVCodecID.AV_CODEC_ID_V408._value, 203) - assert_equal(AVCodecID.AV_CODEC_ID_YUV4._value, 204) - assert_equal(AVCodecID.AV_CODEC_ID_AVRN._value, 205) - assert_equal(AVCodecID.AV_CODEC_ID_PRORES_RAW._value, 274) - - # Audio enum fields. - assert_equal(AVCodecID.AV_CODEC_ID_FIRST_AUDIO._value, 65536) - assert_equal(AVCodecID.AV_CODEC_ID_PCM_S16LE._value, 65536) - assert_equal(AVCodecID.AV_CODEC_ID_PCM_SGA._value, 65536 + 36) - # various ADPCM codecs - assert_equal(AVCodecID.AV_CODEC_ID_ADPCM_IMA_QT._value, 69632) - assert_equal(AVCodecID.AV_CODEC_ID_ADPCM_SANYO._value, 69632 + 53) - - # AMR - assert_equal(AVCodecID.AV_CODEC_ID_AMR_NB._value, 0x12000) - assert_equal(AVCodecID.AV_CODEC_ID_AMR_WB._value, 0x12000 + 1) - # RealAudio codecs - assert_equal(AVCodecID.AV_CODEC_ID_RA_144._value, 0x13000) - assert_equal(AVCodecID.AV_CODEC_ID_RA_288._value, 0x13000 + 1) - # various DPCM codecs - assert_equal(AVCodecID.AV_CODEC_ID_ROQ_DPCM._value, 0x14000) - assert_equal(AVCodecID.AV_CODEC_ID_CBD2_DPCM._value, 0x14000 + 8) - # audio codecs - assert_equal(AVCodecID.AV_CODEC_ID_MP2._value, 0x15000) - assert_equal(AVCodecID.AV_CODEC_ID_G728._value, 0x15000 + 107) - # subtitle / other sections - assert_equal(AVCodecID.AV_CODEC_ID_FIRST_SUBTITLE._value, 0x17000) - # Note there are 2 fields with the same id, so the fields are -1 lower. - assert_equal(AVCodecID.AV_CODEC_ID_IVTV_VBI._value, 0x17000 + 26) - # other specific kind of codecs - assert_equal(AVCodecID.AV_CODEC_ID_FIRST_UNKNOWN._value, 0x18000) - assert_equal(AVCodecID.AV_CODEC_ID_TTF._value, 0x18000) - assert_equal(AVCodecID.AV_CODEC_ID_SMPTE_436M_ANC._value, 0x18000 + 13) - - # Misc other codec ids - assert_equal(AVCodecID.AV_CODEC_ID_PROBE._value, 0x19000) - assert_equal(AVCodecID.AV_CODEC_ID_MPEG2TS._value, 0x20000) - assert_equal(AVCodecID.AV_CODEC_ID_MPEG4SYSTEMS._value, 0x20001) - assert_equal(AVCodecID.AV_CODEC_ID_FFMETADATA._value, 0x21000) - assert_equal(AVCodecID.AV_CODEC_ID_WRAPPED_AVFRAME._value, 0x21001) - assert_equal(AVCodecID.AV_CODEC_ID_VNULL._value, 0x21001 + 1) - assert_equal(AVCodecID.AV_CODEC_ID_ANULL._value, 0x21001 + 2) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avcodec/test_packet.mojo b/tests/test_ffmpeg/test_avcodec/test_packet.mojo deleted file mode 100644 index 3935308..0000000 --- a/tests/test_ffmpeg/test_avcodec/test_packet.mojo +++ /dev/null @@ -1,304 +0,0 @@ -from std.testing import TestSuite, assert_equal, assert_true -from std.memory import alloc, memset -from std.ffi import c_uchar, c_int, c_char, c_size_t - -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg.avcodec.packet import ( - AVPacket, - AVPacketSideDataType, - AVContainerFifo, -) -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary - - -def test_av_packet_alloc() raises: - var packet = avcodec.av_packet_alloc() - assert_true(Bool(packet)) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_clone() raises: - var src = avcodec.av_packet_alloc() - assert_true(Bool(src)) - var ret = avcodec.av_new_packet(src, 64) - assert_equal(ret, 0) - var clone = avcodec.av_packet_clone(src.as_immutable()) - assert_true(Bool(clone)) - assert_equal(clone[].size, 64) - var src_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - src_ptr[0] = src - avcodec.av_packet_free(src_ptr) - var clone_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - clone_ptr[0] = clone - avcodec.av_packet_free(clone_ptr) - - -def test_av_packet_free() raises: - var packet = avcodec.av_packet_alloc() - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_new_packet() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 128) - assert_equal(ret, 0) - assert_equal(packet[].size, 128) - assert_true(Bool(packet[].data)) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_shrink_packet() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 64) - assert_equal(ret, 0) - avcodec.av_shrink_packet(packet, 32) - assert_equal(packet[].size, 32) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_grow_packet() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 32) - assert_equal(ret, 0) - ret = avcodec.av_grow_packet(packet, 32) - assert_equal(ret, 0) - assert_equal(packet[].size, 64) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_new_side_data() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 16) - assert_equal(ret, 0) - var sd = avcodec.av_packet_new_side_data( - packet, - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - 256, - ) - assert_true(Bool(sd)) - assert_equal(packet[].side_data_elems, 1) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_shrink_side_data() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 16) - assert_equal(ret, 0) - var sd = avcodec.av_packet_new_side_data( - packet, - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - 256, - ) - assert_true(Bool(sd)) - ret = avcodec.av_packet_shrink_side_data( - packet, - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - 128, - ) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_get_side_data() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 16) - assert_equal(ret, 0) - var sd = avcodec.av_packet_new_side_data( - packet, - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - 4, - ) - assert_true(Bool(sd)) - var size_out = alloc[c_size_t](1) - size_out[0] = 0 - var got = avcodec.av_packet_get_side_data( - packet.as_immutable(), - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - size_out.unsafe_origin_cast[MutExternalOrigin](), - ) - assert_true(Bool(got)) - assert_equal(size_out[], 4) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_pack_dictionary() raises: - var size_out = alloc[c_size_t](1) - size_out[0] = 0 - var data = avcodec.av_packet_pack_dictionary( - UnsafePointer[AVDictionary, ImmutExternalOrigin](unsafe_from_address=0), - size_out.unsafe_origin_cast[MutExternalOrigin](), - ) - assert_equal(Bool(data), False) - assert_equal(size_out[], 0) - - -def test_av_packet_unpack_dictionary() raises: - var dict_ptr = alloc[AVDictionary](0) - var dict_ptr_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - dict_ptr_ptr[] = dict_ptr - - var ret = avcodec.av_packet_unpack_dictionary( - UnsafePointer[c_uchar, ImmutExternalOrigin](unsafe_from_address=0), - c_size_t(0), - dict_ptr_ptr, - ) - assert_equal(ret, 0) - - -def test_av_packet_free_side_data() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 16) - assert_equal(ret, 0) - var sd = avcodec.av_packet_new_side_data( - packet, - AVPacketSideDataType.AV_PKT_DATA_PALETTE._value, - 4, - ) - assert_true(Bool(sd)) - avcodec.av_packet_free_side_data(packet) - assert_equal(packet[].side_data_elems, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_ref() raises: - var src = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(src, 32) - assert_equal(ret, 0) - var dst = avcodec.av_packet_alloc() - ret = avcodec.av_packet_ref(dst, src.as_immutable()) - assert_equal(ret, 0) - assert_equal(dst[].size, 32) - avcodec.av_packet_unref(src) - avcodec.av_packet_unref(dst) - var src_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - src_ptr[0] = src - avcodec.av_packet_free(src_ptr) - var dst_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - dst_ptr[0] = dst - avcodec.av_packet_free(dst_ptr) - - -def test_av_packet_unref() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 32) - assert_equal(ret, 0) - avcodec.av_packet_unref(packet) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_move_ref() raises: - var src = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(src, 32) - assert_equal(ret, 0) - var dst = avcodec.av_packet_alloc() - avcodec.av_packet_move_ref(dst, src) - assert_equal(dst[].size, 32) - assert_equal(src[].size, 0) - var src_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - src_ptr[0] = src - avcodec.av_packet_free(src_ptr) - var dst_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - dst_ptr[0] = dst - avcodec.av_packet_free(dst_ptr) - - -def test_av_packet_copy_props() raises: - var src = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(src, 32) - assert_equal(ret, 0) - src[].pts = 100 - src[].dts = 90 - src[].duration = 10 - src[].stream_index = 1 - var dst = avcodec.av_packet_alloc() - ret = avcodec.av_packet_copy_props( - dst, - src.as_immutable(), - ) - assert_equal(ret, 0) - assert_equal(dst[].pts, 100) - assert_equal(dst[].dts, 90) - assert_equal(dst[].duration, 10) - assert_equal(dst[].stream_index, 1) - var src_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - src_ptr[0] = src - avcodec.av_packet_free(src_ptr) - var dst_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - dst_ptr[0] = dst - avcodec.av_packet_free(dst_ptr) - - -def test_av_packet_make_refcounted() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 32) - assert_equal(ret, 0) - ret = avcodec.av_packet_make_refcounted(packet) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_make_writable() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 32) - assert_equal(ret, 0) - ret = avcodec.av_packet_make_writable(packet) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_packet_rescale_ts() raises: - var packet = avcodec.av_packet_alloc() - var ret = avcodec.av_new_packet(packet, 32) - assert_equal(ret, 0) - packet[].pts = 0 - packet[].dts = 0 - packet[].duration = 25 - avcodec.av_packet_rescale_ts( - packet, - AVRational(num=1, den=25), - AVRational(num=1, den=12800), - ) - _ = packet[].pts - _ = packet[].dts - _ = packet[].duration - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = packet - avcodec.av_packet_free(pkt_ptr) - - -def test_av_container_fifo_alloc_avpacket() raises: - var fifo = avcodec.av_container_fifo_alloc_avpacket(0) - assert_true(Bool(fifo)) - var fifo_ptr = alloc[UnsafePointer[AVContainerFifo, MutExternalOrigin]](1) - fifo_ptr[0] = fifo - avcodec.av_container_fifo_free(fifo_ptr) - fifo_ptr.free() - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avformat/test_avformat.mojo b/tests/test_ffmpeg/test_avformat/test_avformat.mojo deleted file mode 100644 index c649163..0000000 --- a/tests/test_ffmpeg/test_avformat/test_avformat.mojo +++ /dev/null @@ -1,1699 +0,0 @@ -from std.testing import TestSuite, assert_equal, assert_true -from std.ffi import c_char, c_int, c_uint, c_uchar, c_long_long -from std.sys._libc import dup, fclose, fdopen, fflush -from std.memory import alloc, memset -from std.sys import size_of -from std.os import getenv -from std.pathlib import Path -from ash_dynamics.ffmpeg.avformat.avformat import ( - AVOutputFormat, - AVFormatContext, - AVStreamGroupParamsType, - AVInputFormat, - AVProbeData, - AVProgram, -) -from ash_dynamics.ffmpeg import avformat -from ash_dynamics.ffmpeg.avformat.avio import AVIOContext, AVIO_FLAG_READ -from ash_dynamics.ffmpeg.avformat.internal import AVCodecTag -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.log import AVClassCategory, AVClass -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.frame import AVFrame - - -def test_AVOutputFormat() raises: - var short_name = "mp4" - - var fmt = avformat.av_guess_format(short_name=short_name) - assert_equal(fmt[].video_codec, AVCodecID.AV_CODEC_ID_MPEG4._value) - - var filename = "some/path/to/test.mp4" - var fmt2 = avformat.av_guess_format( - filename=filename, - ) - assert_equal(fmt2[].video_codec, AVCodecID.AV_CODEC_ID_MPEG4._value) - - var mime_type = "video/mp4" - var fmt3 = avformat.av_guess_format( - mime_type=mime_type, - ) - # It is h264 here since we are directly indiciating this contains - # video. - assert_equal(fmt3[].video_codec, AVCodecID.AV_CODEC_ID_H264._value) - - print("fmt:", fmt2) - _ = fmt - - -def test_alloc_output_context() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - - var filename = String("some/path/to/test.mp4") - var ret = avformat.alloc_output_context( - ctx=ctx, - filename=filename, - ) - assert_equal(ret, 0) - assert_equal(Bool(ctx), True) - - # AVFormatContext field offsets: - # av_class: 0 - # iformat: 8 - # oformat: 16 - # priv_data: 24 - # pb: 32 - # ctx_flags: 40 - # nb_streams: 44 - # nb_stream_groups: 56 - # packet_size: 120 - # max_delay: 124 - # flags: 128 - - # Size of pointer: 8 bytes - # Size of int: 4 bytes - # Size of unsigned int: 4 bytes - # Total struct size: 472 bytes - - # 472 bytes, same as c - print( - "sizeof(AVFormatContext) (Mojo):", size_of[AVFormatContext](), "bytes" - ) - - assert_equal(ctx[][].ctx_flags, 0) - assert_equal(ctx[][].nb_streams, 0) - assert_equal(ctx[][].nb_stream_groups, 0) - assert_equal(ctx[][].packet_size, 0) - assert_equal(ctx[][].max_delay, -1) - assert_equal(ctx[][].flags, 2097152) - assert_equal(ctx[][].probesize, 5000000) - assert_equal(ctx[][].max_analyze_duration, 0) - assert_equal(ctx[][].keylen, 0) - assert_equal(ctx[][].nb_chapters, 0) - assert_equal(ctx[][].nb_programs, 0) - assert_equal(ctx[][].start_time, 0) - assert_equal(ctx[][].duration, 0) - assert_equal(ctx[][].bit_rate, 0) - assert_equal(ctx[][].video_codec_id, 0) - assert_equal(ctx[][].audio_codec_id, 0) - assert_equal(ctx[][].subtitle_codec_id, 0) - assert_equal(ctx[][].data_codec_id, 0) - - assert_equal( - String(unsafe_from_utf8_ptr=ctx[][].av_class[].class_name), - "AVFormatContext", - ) - assert_equal(ctx[][].av_class[].state_flags_offset, 0) - avformat.avformat_free_context(ctx[]) - ctx.free() - _ = ret - - -def test_avformat_get_class() raises: - var av_class = avformat.avformat_get_class() - assert_equal( - String(unsafe_from_utf8_ptr=av_class[].class_name), "AVFormatContext" - ) - assert_equal( - av_class[].category, AVClassCategory.AV_CLASS_CATEGORY_MUXER._value - ) - assert_equal(av_class[].state_flags_offset, 0) - _ = av_class - - -def test_avformat_version() raises: - var ver = avformat.avformat_version() - assert_true(ver > 0) - - -def test_avformat_configuration() raises: - var cfg = avformat.avformat_configuration() - assert_true(Bool(cfg)) - _ = String(unsafe_from_utf8_ptr=cfg) - - -def test_avformat_license() raises: - var lic = avformat.avformat_license() - assert_true(Bool(lic)) - _ = String(unsafe_from_utf8_ptr=lic) - - -def test_avformat_network_init_deinit() raises: - var ret = avformat.avformat_network_init() - assert_equal(ret, 0) - var ret2 = avformat.avformat_network_deinit() - assert_equal(ret2, 0) - - -def test_av_muxer_iterate() raises: - var opaque = alloc[OpaquePointer[MutExternalOrigin]](1) - memset(opaque, 0, 1) - var count = 0 - while True: - var fmt = avformat.av_muxer_iterate( - opaque, - ) - if not Bool(fmt): - break - count += 1 - assert_true(count > 0) - - -def test_av_demuxer_iterate() raises: - var opaque = alloc[OpaquePointer[MutExternalOrigin]](1) - memset(opaque, 0, 1) - var count = 0 - while True: - var fmt = avformat.av_demuxer_iterate( - opaque, - ) - if not Bool(fmt): - break - count += 1 - assert_true(count > 0) - - -def test_avformat_alloc_free_context() raises: - var ctx = avformat.avformat_alloc_context() - assert_true(Bool(ctx)) - avformat.avformat_free_context(ctx) - - -def test_av_find_input_format() raises: - var name = "mp4" - var fmt = avformat.av_find_input_format( - name, - ) - assert_true(Bool(fmt)) - assert_equal( - String(unsafe_from_utf8_ptr=fmt[].name), "mov,mp4,m4a,3gp,3g2,mj2" - ) - - -def test_av_disposition_from_string_to_string() raises: - var disp_str = "default" - var disp = avformat.av_disposition_from_string( - disp_str, - ) - assert_equal(disp, 1) - var back = avformat.av_disposition_to_string(disp) - assert_true(Bool(back)) - assert_equal(String(unsafe_from_utf8_ptr=back), "default") - - -def test_av_match_ext() raises: - var filename = "test.mp4" - var ext = "mp4,mov,m4a" - var ret = avformat.av_match_ext( - filename, - ext, - ) - assert_true(ret > 0) - var txt_ext = "txt,log" - var ret2 = avformat.av_match_ext( - filename, - txt_ext, - ) - assert_equal(ret2, 0) - - -def test_avformat_get_riff_mov_tags() raises: - var riff_video = avformat.avformat_get_riff_video_tags() - var riff_audio = avformat.avformat_get_riff_audio_tags() - var mov_video = avformat.avformat_get_mov_video_tags() - var mov_audio = avformat.avformat_get_mov_audio_tags() - assert_true(Bool(riff_video)) - assert_true(Bool(riff_audio)) - assert_true(Bool(mov_video)) - assert_true(Bool(mov_audio)) - - -def test_av_codec_get_id_and_tag() raises: - var tags = avformat.avformat_get_riff_video_tags() - var table = alloc[UnsafePointer[AVCodecTag, ImmutExternalOrigin]](2) - table[0] = tags - table[1] = UnsafePointer[AVCodecTag, ImmutExternalOrigin]( - unsafe_from_address=0 - ) - # MKTAG('H','2','6','4') = 0x34363248 on little-endian - var tag = c_uint(0x34363248) - var codec_id = avformat.av_codec_get_id( - table.as_immutable(), - tag, - ) - assert_equal(codec_id, AVCodecID.AV_CODEC_ID_H264._value) - var tag_out = avformat.av_codec_get_tag( - table.as_immutable(), - AVCodecID.AV_CODEC_ID_H264._value, - ) - assert_equal(Int(tag_out), Int(tag)) - - -def test_av_filename_number_test() raises: - var valid = "frame_%03d.png" - var ret = avformat.av_filename_number_test( - valid, - ) - assert_equal(ret, 1) - var invalid = "frame.png" - var ret2 = avformat.av_filename_number_test( - invalid, - ) - assert_equal(ret2, 0) - - -def test_av_stream_get_parser() raises: - var ctx = avformat.avformat_alloc_context() - var st = avformat.avformat_new_stream( - ctx, - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - var parser = avformat.av_stream_get_parser( - st.as_immutable(), - ) - assert_equal(Bool(parser), False) - avformat.avformat_free_context(ctx) - - -def test_av_find_default_stream_index() raises: - var ctx = avformat.avformat_alloc_context() - var idx = avformat.av_find_default_stream_index( - ctx, - ) - assert_equal(idx, -1) - avformat.avformat_free_context(ctx) - - -def test_av_hex_dump() raises: - var buf = alloc[c_uchar](16) - for i in range(16): - buf[i] = c_uchar(i) - var fd = dup(1) - var f = fdopen(fd, "w".as_c_string_slice().unsafe_ptr().as_immutable()) - avformat.av_hex_dump( - f, - buf.as_immutable(), - 16, - ) - _ = fflush(f) - fclose(f) - buf.free() - - -def test_av_dump_format() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - if ret == 0: - avformat.av_dump_format( - ctx_ptr[], - -1, - path, - 0, - ) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_stream_get_class() raises: - var cls = avformat.av_stream_get_class() - assert_true(Bool(cls)) - _ = String(unsafe_from_utf8_ptr=cls[].class_name) - - -def test_av_stream_group_get_class() raises: - var cls = avformat.av_stream_group_get_class() - assert_true(Bool(cls)) - _ = String(unsafe_from_utf8_ptr=cls[].class_name) - - -def test_avformat_stream_group_name() raises: - var name = avformat.avformat_stream_group_name( - AVStreamGroupParamsType.AV_STREAM_GROUP_PARAMS_TILE_GRID.value, - ) - assert_true(Bool(name)) - assert_equal(String(unsafe_from_utf8_ptr=name), "Tile Grid") - - -def test_avformat_stream_group_create_new_stream_add_stream() raises: - var ctx = avformat.avformat_alloc_context() - assert_true(Bool(ctx)) - var stg = avformat.avformat_stream_group_create( - ctx, - AVStreamGroupParamsType.AV_STREAM_GROUP_PARAMS_TILE_GRID.value, - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_true(Bool(stg)) - var st = avformat.avformat_new_stream( - ctx, - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - assert_true(Bool(st)) - var ret = avformat.avformat_stream_group_add_stream( - stg, - st, - ) - assert_equal(ret, 0) - avformat.avformat_free_context(ctx) - - -def test_av_new_program() raises: - var ctx = avformat.avformat_alloc_context() - assert_true(Bool(ctx)) - var prog = avformat.av_new_program( - ctx, - 1, - ) - assert_true(Bool(prog)) - avformat.avformat_free_context(ctx) - - -def test_av_guess_codec() raises: - var short_name = "mp4" - var fmt = avformat.av_guess_format(short_name) - assert_true(Bool(fmt)) - var codec_id = avformat.av_guess_codec( - fmt, - short_name, - None, - None, - AVMediaType.AVMEDIA_TYPE_VIDEO._value, - ) - assert_true( - codec_id == AVCodecID.AV_CODEC_ID_H264._value - or codec_id == AVCodecID.AV_CODEC_ID_MPEG4._value - ) - - -def test_avformat_query_codec() raises: - var short_name = "mp4" - var short_ptr = short_name.as_c_string_slice().unsafe_ptr().as_immutable() - var fmt = avformat.av_guess_format(short_name) - assert_true(Bool(fmt)) - var ret = avformat.avformat_query_codec( - fmt, - AVCodecID.AV_CODEC_ID_H264._value, - 0, - ) - assert_true(ret >= 0) - - -def test_av_codec_get_tag2() raises: - var tags = avformat.avformat_get_riff_video_tags() - var table = alloc[UnsafePointer[AVCodecTag, ImmutExternalOrigin]](2) - table[0] = tags - table[1] = UnsafePointer[AVCodecTag, ImmutExternalOrigin]( - unsafe_from_address=0 - ) - var tag_out = alloc[c_uint](1) - var ret = avformat.av_codec_get_tag2( - table.as_immutable(), - AVCodecID.AV_CODEC_ID_H264._value, - tag_out, - ) - assert_true(ret > 0) - assert_equal(Int(tag_out[]), 0x34363248) - - -def test_av_get_frame_filename() raises: - var buf = alloc[c_char](256) - memset(buf, 0, 256) - var path = "frame_%03d.png" - var ret = avformat.av_get_frame_filename( - buf, - 256, - path, - 42, - ) - assert_equal(ret, 0) - assert_equal(String(unsafe_from_utf8_ptr=buf), "frame_042.png") - - -def test_av_get_frame_filename2() raises: - var buf = alloc[c_char](256) - memset(buf, 0, 256) - var path = "frame_%03d.png" - var ret = avformat.av_get_frame_filename2( - buf, - 256, - path, - 42, - 0, - ) - assert_equal(ret, 0) - assert_equal(String(unsafe_from_utf8_ptr=buf), "frame_042.png") - - -def test_avformat_match_stream_specifier() raises: - var ctx = avformat.avformat_alloc_context() - var st = avformat.avformat_new_stream( - ctx, - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - var spec = "v:0" - # var spec_ptr = spec.as_c_string_slice().unsafe_ptr().as_immutable() - var ret = avformat.avformat_match_stream_specifier( - ctx, - st, - spec, - ) - assert_true(ret >= 0) - avformat.avformat_free_context(ctx) - - -def test_av_url_split() raises: - var proto = alloc[c_char](256) - var auth = alloc[c_char](256) - var host = alloc[c_char](256) - var path = alloc[c_char](256) - var port = alloc[c_int](1) - memset(proto, 0, 256) - memset(auth, 0, 256) - memset(host, 0, 256) - memset(path, 0, 256) - var url = "https://example.com:443/path/to/resource" - var url_ptr = url.as_c_string_slice().unsafe_ptr().as_immutable() - avformat.av_url_split( - proto, - 256, - auth, - 256, - host, - 256, - port, - path, - 256, - url_ptr, - ) - assert_equal(String(unsafe_from_utf8_ptr=proto), "https") - assert_equal(String(unsafe_from_utf8_ptr=host), "example.com") - assert_equal(port[], 443) - - -def test_avformat_find_stream_info() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_find_best_stream() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var stream_idx = avformat.av_find_best_stream( - ctx_ptr[], - AVMediaType.AVMEDIA_TYPE_VIDEO._value, - -1, - -1, - UnsafePointer[ - UnsafePointer[AVCodec, ImmutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - 0, - ) - assert_true(stream_idx >= 0) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_read_frame() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = avcodec.av_packet_alloc() - assert_true(Bool(pkt_ptr[0])) - ret = avformat.av_read_frame( - ctx_ptr[], - pkt_ptr[0], - ) - assert_true(ret >= 0) - avcodec.av_packet_unref(pkt_ptr[0]) - avcodec.av_packet_free(pkt_ptr) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_get_packet() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - var pb = ctx_ptr[][].pb - assert_true(Bool(pb)) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = avcodec.av_packet_alloc() - assert_true(Bool(pkt_ptr[0])) - ret = avformat.av_get_packet( - pb, - pkt_ptr[0], - 1024, - ) - assert_true(ret > 0) - avcodec.av_packet_unref(pkt_ptr[0]) - avcodec.av_packet_free(pkt_ptr) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_append_packet() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - var pb = ctx_ptr[][].pb - assert_true(Bool(pb)) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = avcodec.av_packet_alloc() - assert_true(Bool(pkt_ptr[0])) - ret = avformat.av_get_packet( - pb, - pkt_ptr[0], - 512, - ) - assert_true(ret > 0) - ret = avformat.av_append_packet( - pb, - pkt_ptr[0], - 256, - ) - assert_true(ret > 0) - avcodec.av_packet_unref(pkt_ptr[0]) - avcodec.av_packet_free(pkt_ptr) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_hex_dump_log() raises: - var buf = alloc[c_uchar](16) - for i in range(16): - buf[i] = c_uchar(i) - avformat.av_hex_dump_log( - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - buf.as_immutable(), - 16, - ) - - -def test_av_guess_frame_rate() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var nb_streams = ctx_ptr[][].nb_streams - assert_true(nb_streams > 0) - var st = ctx_ptr[][].streams[0] - var ret_rational = avformat.av_guess_frame_rate( - ctx_ptr[], - st, - UnsafePointer[AVFrame, MutExternalOrigin](unsafe_from_address=0), - ) - assert_true(ret_rational.num > 0) - assert_true(ret_rational.den > 0) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_guess_sample_aspect_ratio() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var nb_streams = ctx_ptr[][].nb_streams - assert_true(nb_streams > 0) - var st = ctx_ptr[][].streams[0] - var frame = avutil.av_frame_alloc() - assert_true(Bool(frame)) - _ = avformat.av_guess_sample_aspect_ratio( - ctx_ptr[], - st, - frame, - ) - # assert_true(ret_rational.num > 0) - # assert_true(ret_rational.den > 0) - avutil.av_frame_free(frame) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_probe_input_format() raises: - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var buf_size = 64 - var pad = AVProbeData.AVPROBE_PADDING_SIZE - var buf = InlineArray[c_uchar, 64 + 32](uninitialized=True) - memset(buf.unsafe_ptr(), 0, buf_size + pad) - var n: Int - with open(Path(path), "r") as f: - n = f.read(buffer=buf) - assert_true(n > 0) - var filename = "test.h264" - var pd_ptr = alloc[AVProbeData](1) - pd_ptr[0] = AVProbeData( - filename=filename, - buf=buf.unsafe_ptr().unsafe_origin_cast[MutExternalOrigin](), - buf_size=c_int(n), - mime_type=None, - ) - var fmt = avformat.av_probe_input_format( - pd_ptr.as_immutable(), - 0, - ) - var score_max = alloc[c_int](1) - score_max[0] = 100 - var fmt2 = avformat.av_probe_input_format2( - pd_ptr.as_immutable(), - 0, - score_max, - ) - assert_true(n > 0) - var score_ret = alloc[c_int](1) - var fmt3 = avformat.av_probe_input_format3( - pd_ptr.as_immutable(), - 0, - score_ret, - ) - _ = fmt - _ = fmt2 - _ = fmt3 - _ = score_ret - - -def test_av_probe_input_buffer2() raises: - var pb_ptr = alloc[UnsafePointer[AVIOContext, MutExternalOrigin]](1) - memset(pb_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avio_open( - pb_ptr, - path, - AVIO_FLAG_READ, - ) - assert_equal(ret, 0) - assert_true(Bool(pb_ptr[0])) - var fmt_ptr = alloc[UnsafePointer[AVInputFormat, ImmutExternalOrigin]](1) - memset(fmt_ptr, 0, 1) - ret = avformat.av_probe_input_buffer2( - pb_ptr[0], - fmt_ptr, - path, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - 0, - ) - assert_true(ret >= 0) - ret = avformat.avio_closep(pb_ptr) - assert_true(ret >= 0) - - _ = fmt_ptr - - -def test_av_probe_input_buffer() raises: - var pb_ptr = alloc[UnsafePointer[AVIOContext, MutExternalOrigin]](1) - memset(pb_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avio_open( - pb_ptr, - path, - AVIO_FLAG_READ, - ) - assert_equal(ret, 0) - assert_true(Bool(pb_ptr[0])) - var fmt_ptr = alloc[UnsafePointer[AVInputFormat, ImmutExternalOrigin]](1) - memset(fmt_ptr, 0, 1) - ret = avformat.av_probe_input_buffer( - pb_ptr[0], - fmt_ptr, - path, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - 0, - ) - assert_equal(ret, 0) - ret = avformat.avio_closep(pb_ptr) - assert_true(ret >= 0) - - _ = fmt_ptr - - -def test_av_seek_frame() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - _ = avformat.av_seek_frame( - ctx_ptr[], - -1, - 0, - 0, - ) - # assert_true(ret >= 0) - avformat.avformat_close_input(ctx_ptr) - - -def test_avformat_seek_file() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - ret = avformat.avformat_seek_file( - ctx_ptr[], - -1, - -9223372036854775808, - 0, - 9223372036854775807, - 0, - ) - _ = ret - avformat.avformat_close_input(ctx_ptr) - - -def test_avformat_flush() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - avformat.avformat_flush(ctx_ptr[]) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_read_play_pause() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - avformat.av_read_play(ctx_ptr[]) - avformat.av_read_pause(ctx_ptr[]) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_find_program_from_stream() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var prog = avformat.av_find_program_from_stream( - ctx_ptr[], - UnsafePointer[AVProgram, MutExternalOrigin](unsafe_from_address=0), - 0, - ) - avformat.avformat_close_input(ctx_ptr) - - _ = prog - - -def test_av_program_add_stream_index() raises: - var ctx = avformat.avformat_alloc_context() - var prog = avformat.av_new_program( - ctx, - 1, - ) - assert_true(Bool(prog)) - avformat.av_program_add_stream_index( - ctx, - 1, - 0, - ) - avformat.avformat_free_context(ctx) - - -def test_av_pkt_dump2() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = avcodec.av_packet_alloc() - ret = avformat.av_read_frame( - ctx_ptr[], - pkt_ptr[0], - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - var fd = dup(1) - var f = fdopen(fd, "w".as_c_string_slice().unsafe_ptr().as_immutable()) - avformat.av_pkt_dump2( - f, - pkt_ptr[0].as_immutable(), - 0, - st.as_immutable(), - ) - _ = fflush(f) - fclose(f) - avcodec.av_packet_unref(pkt_ptr[0]) - avcodec.av_packet_free(pkt_ptr) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_pkt_dump_log2() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - var pkt_ptr = alloc[UnsafePointer[AVPacket, MutExternalOrigin]](1) - pkt_ptr[0] = avcodec.av_packet_alloc() - ret = avformat.av_read_frame( - ctx_ptr[], - pkt_ptr[0], - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - avformat.av_pkt_dump_log2( - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - pkt_ptr[0].as_immutable(), - 0, - st.as_immutable(), - ) - avcodec.av_packet_unref(pkt_ptr[0]) - avcodec.av_packet_free(pkt_ptr) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_index_search_timestamp() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - var idx = avformat.av_index_search_timestamp( - st, - 0, - 0, - ) - avformat.avformat_close_input(ctx_ptr) - - _ = idx - - -def test_avformat_index_get_entries_count() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - var count = avformat.avformat_index_get_entries_count( - st, - ) - assert_true(count >= 0) - avformat.avformat_close_input(ctx_ptr) - - -def test_avformat_index_get_entry() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - var count = avformat.avformat_index_get_entries_count( - st, - ) - if count > 0: - var entry = avformat.avformat_index_get_entry( - st, - 0, - ) - _ = entry - avformat.avformat_close_input(ctx_ptr) - - -def test_avformat_index_get_entry_from_timestamp() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - ret = avformat.avformat_find_stream_info( - ctx_ptr[], - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ](unsafe_from_address=0), - ) - assert_true(ret >= 0) - var st = ctx_ptr[][].streams[0] - var entry = avformat.avformat_index_get_entry_from_timestamp( - st, - 0, - 0, - ) - avformat.avformat_close_input(ctx_ptr) - - _ = entry - - -def test_av_add_index_entry() raises: - var ctx = avformat.avformat_alloc_context() - var st = avformat.avformat_new_stream( - ctx, - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - var ret = avformat.av_add_index_entry( - st, - 0, - 0, - 100, - 1, - 0, - ) - assert_true(ret >= 0) - avformat.avformat_free_context(ctx) - - -def test_avformat_queue_attached_pictures() raises: - var ctx_ptr = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - memset(ctx_ptr, 0, 1) - var path = String("{}/test_data/testsrc_320x180_30fps_2s.h264").format( - getenv("PIXI_PROJECT_ROOT"), - ) - var ret = avformat.avformat_open_input( - ctx_ptr, - path, - UnsafePointer[AVInputFormat, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ), - ) - assert_equal(ret, 0) - avformat.avformat_queue_attached_pictures( - ctx_ptr[], - ) - avformat.avformat_close_input(ctx_ptr) - - -def test_av_get_output_timestamp() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var filename = String("some/path/to/test.mp4") - var ret = avformat.alloc_output_context(ctx=ctx, filename=filename) - assert_equal(ret, 0) - var dts = alloc[c_long_long](1) - var wall = alloc[c_long_long](1) - ret = avformat.av_get_output_timestamp( - ctx[], - 0, - dts, - wall, - ) - avformat.avformat_free_context(ctx[]) - - dts.free() - wall.free() - - -def test_avformat_write_header_trailer() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var fmt = avformat.av_guess_format(short_name="null") - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_write_header( - ctx[], - opt, - ) - if ret >= 0: - ret = avformat.av_write_trailer(ctx[]) - avformat.avformat_free_context(ctx[]) - - -def test_av_sdp_create() raises: - var ac = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - ac[0] = avformat.avformat_alloc_context() - assert_true(Bool(ac[0])) - var buf = alloc[c_char](256) - memset(buf, 0, 256) - var ret = avformat.av_sdp_create( - ac, - 1, - buf, - 256, - ) - assert_equal(ret, 0) - avformat.avformat_free_context(ac[0]) - buf.free() - ac.free() - - -def test_avformat_init_output() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var fmt = avformat.av_guess_format(short_name="null") - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_init_output( - ctx[], - opt, - ) - assert_true(ret >= 0) - # ret may be < 0 for null muxer without pb; we just verify the API call completes - avformat.avformat_free_context(ctx[]) - - -def test_av_write_frame() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var fmt = avformat.av_guess_format(short_name="null") - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_write_header( - ctx[], - opt, - ) - if ret >= 0: - ret = avformat.av_write_frame( - ctx[], - UnsafePointer[AVPacket, MutExternalOrigin](unsafe_from_address=0), - ) - assert_true(ret >= 0) - ret = avformat.av_write_trailer(ctx[]) - assert_true(ret >= 0) - avformat.avformat_free_context(ctx[]) - - -def test_av_interleaved_write_frame() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var fmt = avformat.av_guess_format(short_name="null") - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_write_header( - ctx[], - opt, - ) - if ret >= 0: - ret = avformat.av_interleaved_write_frame( - ctx[], - UnsafePointer[AVPacket, MutExternalOrigin](unsafe_from_address=0), - ) - assert_true(ret >= 0) - ret = avformat.av_write_trailer(ctx[]) - assert_true(ret >= 0) - avformat.avformat_free_context(ctx[]) - - -def test_av_write_uncoded_frame_query() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var fmt = avformat.av_guess_format(short_name="null") - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - _ = avformat.av_write_uncoded_frame_query( - ctx[], - 0, - ) - avformat.avformat_free_context(ctx[]) - - -def test_av_write_uncoded_frame() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var short_name = Optional(String("null")) - var fmt = avformat.av_guess_format(short_name=short_name) - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_write_header( - ctx[], - opt, - ) - if ret >= 0: - _ = avformat.av_write_uncoded_frame( - ctx[], - 0, - UnsafePointer[AVFrame, MutExternalOrigin](unsafe_from_address=0), - ) - # assert_true(ret >= 0) - _ = avformat.av_write_trailer(ctx[]) - # assert_true(ret >= 0) - avformat.avformat_free_context(ctx[]) - - -def test_av_interleaved_write_uncoded_frame() raises: - var ctx = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - var short_name = Optional(String("null")) - var fmt = avformat.av_guess_format(short_name=short_name) - if not Bool(fmt): - return - var filename = String("") - var ret = avformat.alloc_output_context( - ctx=ctx, - oformat=fmt, - format_name=UnsafePointer[c_char, ImmutExternalOrigin]( - unsafe_from_address=0 - ), - filename=filename, - ) - if ret < 0: - return - var st = avformat.avformat_new_stream( - ctx[], - UnsafePointer[AVCodec, ImmutExternalOrigin](unsafe_from_address=0), - ) - if not Bool(st): - avformat.avformat_free_context(ctx[]) - - return - st[].time_base.num = 1 - st[].time_base.den = 25 - st[].codecpar[].codec_type = AVMediaType.AVMEDIA_TYPE_VIDEO._value - st[].codecpar[].codec_id = AVCodecID.AV_CODEC_ID_H264._value - st[].codecpar[].width = 640 - st[].codecpar[].height = 480 - var opt = UnsafePointer[ - UnsafePointer[AVDictionary, MutExternalOrigin], MutExternalOrigin - ]( - unsafe_from_address=0, - ) - ret = avformat.avformat_write_header( - ctx[], - opt, - ) - if ret >= 0: - _ = avformat.av_interleaved_write_uncoded_frame( - ctx[], - 0, - UnsafePointer[AVFrame, MutExternalOrigin](unsafe_from_address=0), - ) - # assert_true(ret >= 0) - _ = avformat.av_write_trailer(ctx[]) - # assert_true(ret >= 0) - avformat.avformat_free_context(ctx[]) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avutil/test_buffer.mojo b/tests/test_ffmpeg/test_avutil/test_buffer.mojo deleted file mode 100644 index a614760..0000000 --- a/tests/test_ffmpeg/test_avutil/test_buffer.mojo +++ /dev/null @@ -1,291 +0,0 @@ -from std.testing import TestSuite, assert_true, assert_equal -from std.memory import alloc, memset -from std.ffi import c_size_t, c_uint, c_int, c_uchar, external_call -from ash_dynamics.ffmpeg.avutil.buffer import ( - AVBuffer, - AVBufferRef, - AVBufferPool, -) -from ash_dynamics.ffmpeg import avutil - - -fn my_free( - opaque: OpaquePointer[MutExternalOrigin], - data: UnsafePointer[c_uchar, MutExternalOrigin], -): - # free() from libc is always globally visible, unlike FFmpeg symbols. - external_call["free", NoneType](data) - - -# Mirrors AVBuffer's actual C layout (libavutil/buffer_internal.h): -# uint8_t *data; // offset 0, 8 bytes -# size_t size; // offset 8, 8 bytes -# atomic_uint refcount; // offset 16, 4 bytes (unsigned int in memory) -# // offset 20, 4 bytes -# void (*free)(void*, uint8_t*); // offset 24, 8 bytes -# void *opaque; // offset 32, 8 bytes -# int flags; // offset 40, 4 bytes -# int flags_internal; // offset 44, 4 bytes -struct AVBufferLayout: - var data: UnsafePointer[c_uchar, MutExternalOrigin] - var size: c_size_t - var refcount: c_uint - var _pad: c_uint - var free: fn( - OpaquePointer[MutExternalOrigin], - UnsafePointer[c_uchar, MutExternalOrigin], - ) -> NoneType - var opaque: OpaquePointer[MutExternalOrigin] - var flags: c_int - var flags_internal: c_int - - -fn my_alloc(size: c_size_t) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - # Custom logic: allocate double the requested size. - # data is malloc'd so my_free (which calls glibc free) can release it. - # AVBuffer/AVBufferRef are managed by av_buffer_create using FFmpeg's own - # allocator, so av_free can safely release them. - var n = size + size - var data = external_call[ - "malloc", UnsafePointer[c_uchar, MutExternalOrigin] - ](n) - return avutil.av_buffer_create( - data, - n, - my_free, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - ) - - -fn my_alloc2( - opaque: OpaquePointer[MutExternalOrigin], size: c_size_t -) -> UnsafePointer[AVBufferRef, MutExternalOrigin]: - return my_alloc(size) - - -fn my_pool_free(opaque: OpaquePointer[MutExternalOrigin]) -> NoneType: - return - - -def test_av_buffer_alloc() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - assert_true(Bool(buf_ptr[])) - assert_equal(Int(buf_ptr[][].size), 128) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_allocz() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_allocz(128) - assert_true(Bool(buf_ptr[])) - assert_equal(Int(buf_ptr[][].size), 128) - # allocz zeroes the data - assert_equal(Int(buf_ptr[][].data[0]), 0) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_create() raises: - var data = external_call[ - "malloc", UnsafePointer[c_uchar, MutExternalOrigin] - ](128) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_create( - data, - 128, - my_free, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - 0, - ) - assert_true(Bool(buf_ptr[])) - assert_equal(Int(buf_ptr[][].size), 128) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_ref() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - assert_true(Bool(buf_ptr[])) - var ref_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - ref_ptr[] = avutil.av_buffer_ref(buf_ptr[].as_immutable()) - assert_true(Bool(ref_ptr[])) - assert_equal(avutil.av_buffer_get_ref_count(buf_ptr[].as_immutable()), 2) - avutil.av_buffer_unref(ref_ptr) - ref_ptr.free() - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_unref() raises: - var buf = avutil.av_buffer_alloc(128) - assert_true(Bool(buf)) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = buf - avutil.av_buffer_unref(buf_ptr) - - -def test_av_buffer_is_writable() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - assert_equal(avutil.av_buffer_is_writable(buf_ptr[].as_immutable()), 1) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_get_opaque() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - # Default alloc sets opaque to NULL -- just check it doesn't crash. - _ = avutil.av_buffer_get_opaque(buf_ptr[].as_immutable()) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_get_ref_count() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - assert_equal(avutil.av_buffer_get_ref_count(buf_ptr[].as_immutable()), 1) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_make_writable() raises: - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - # Single ref -- already writable, so this is a no-op returning 0. - assert_equal( - avutil.av_buffer_make_writable(buf_ptr), - 0, - ) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_realloc() raises: - var buf = avutil.av_buffer_alloc(128) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = buf - assert_equal( - avutil.av_buffer_realloc(buf_ptr, 256), - 0, - ) - assert_equal(Int(buf_ptr[][].size), 256) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - - -def test_av_buffer_replace() raises: - var src_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - src_ptr[] = avutil.av_buffer_alloc(128) - var dst = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - memset(dst, 0, 1) - assert_equal( - avutil.av_buffer_replace( - dst, - src_ptr[].as_immutable(), - ), - 0, - ) - assert_equal(Int(dst[][].size), 128) - avutil.av_buffer_unref(src_ptr) - src_ptr.free() - avutil.av_buffer_unref(dst) - dst.free() - - -def test_av_buffer_pool_init() raises: - var pool_ptr = alloc[UnsafePointer[AVBufferPool, MutExternalOrigin]](1) - pool_ptr[] = avutil.av_buffer_pool_init(128, my_alloc) - assert_true(Bool(pool_ptr[])) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_pool_get(pool_ptr[]) - assert_true(Bool(buf_ptr[])) - # my_alloc doubled the size -- proves our fn was called, not FFmpeg's default. - assert_equal(Int(buf_ptr[][].size), 256) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - avutil.av_buffer_pool_uninit(pool_ptr) - pool_ptr.free() - - -def test_av_buffer_pool_init2() raises: - var pool_ptr = alloc[UnsafePointer[AVBufferPool, MutExternalOrigin]](1) - pool_ptr[] = avutil.av_buffer_pool_init2( - 128, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - my_alloc2, - my_pool_free, - ) - assert_true(Bool(pool_ptr[])) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_pool_get(pool_ptr[]) - assert_true(Bool(buf_ptr[])) - assert_equal(Int(buf_ptr[][].size), 256) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - avutil.av_buffer_pool_uninit(pool_ptr) - pool_ptr.free() - - -def test_av_buffer_pool_uninit() raises: - var pool = avutil.av_buffer_pool_init(128, my_alloc) - assert_true(Bool(pool)) - var pool_ptr = alloc[UnsafePointer[AVBufferPool, MutExternalOrigin]](1) - pool_ptr[] = pool - avutil.av_buffer_pool_uninit(pool_ptr) - - -def test_av_buffer_pool_get() raises: - var pool_ptr = alloc[UnsafePointer[AVBufferPool, MutExternalOrigin]](1) - pool_ptr[] = avutil.av_buffer_pool_init(128, my_alloc) - var buf1_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf1_ptr[] = avutil.av_buffer_pool_get(pool_ptr[]) - var buf2_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf2_ptr[] = avutil.av_buffer_pool_get(pool_ptr[]) - assert_true(Bool(buf1_ptr[])) - assert_true(Bool(buf2_ptr[])) - avutil.av_buffer_unref(buf1_ptr) - buf1_ptr.free() - avutil.av_buffer_unref(buf2_ptr) - buf2_ptr.free() - avutil.av_buffer_pool_uninit(pool_ptr) - pool_ptr.free() - - -def test_av_buffer_pool_buffer_get_opaque() raises: - var pool_ptr = alloc[UnsafePointer[AVBufferPool, MutExternalOrigin]](1) - pool_ptr[] = avutil.av_buffer_pool_init(128, my_alloc) - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_pool_get(pool_ptr[]) - assert_true(Bool(buf_ptr[])) - # Just check it doesn't crash -- opaque is NULL for pools with no pool_free. - _ = avutil.av_buffer_pool_buffer_get_opaque(buf_ptr[].as_immutable()) - avutil.av_buffer_unref(buf_ptr) - buf_ptr.free() - avutil.av_buffer_pool_uninit(pool_ptr) - pool_ptr.free() - - -def main() raises: - pass - TestSuite.discover_tests[__functions_in_module()]().run() - # test_av_buffer_alloc() - # test_av_buffer_allocz() - # test_av_buffer_create() - # test_av_buffer_ref() - # test_av_buffer_unref() - # test_av_buffer_is_writable() - # test_av_buffer_get_opaque() - # test_av_buffer_get_ref_count() - # test_av_buffer_make_writable() - # test_av_buffer_realloc() - # test_av_buffer_replace() - # test_av_buffer_pool_init() - # test_av_buffer_pool_init2() - # test_av_buffer_pool_uninit() - # test_av_buffer_pool_get() - # test_av_buffer_pool_buffer_get_opaque() diff --git a/tests/test_ffmpeg/test_avutil/test_channel_layout.mojo b/tests/test_ffmpeg/test_avutil/test_channel_layout.mojo deleted file mode 100644 index c14b322..0000000 --- a/tests/test_ffmpeg/test_avutil/test_channel_layout.mojo +++ /dev/null @@ -1,359 +0,0 @@ -from std.testing import TestSuite, assert_true, assert_equal -from std.memory import alloc, memset -from std.ffi import c_char, c_int, c_size_t, c_ulong_long -from ash_dynamics.ffmpeg.avutil.channel_layout import ( - AVChannel, - AVChannelLayout, - AVChannelOrder, - AV_CH_LAYOUT_STEREO, -) -from ash_dynamics.ffmpeg import avutil - - -def test_av_channel_name() raises: - var buf = alloc[c_char](64) - var ret = avutil.av_channel_name( - buf.unsafe_origin_cast[MutExternalOrigin](), - 64, - AVChannel.AV_CHAN_FRONT_LEFT._value, - ) - assert_true(ret >= 0) - - -def test_av_channel_description() raises: - var buf = alloc[c_char](64) - var ret = avutil.av_channel_description( - buf.unsafe_origin_cast[MutExternalOrigin](), - 64, - AVChannel.AV_CHAN_FRONT_LEFT._value, - ) - assert_true(ret >= 0) - - -def test_av_channel_from_string() raises: - var ch = avutil.av_channel_from_string( - "FL".as_c_string_slice() - .unsafe_ptr() - .as_immutable() - .unsafe_origin_cast[ImmutExternalOrigin]() - ) - assert_equal(Int(ch), Int(AVChannel.AV_CHAN_FRONT_LEFT._value)) - - -def test_av_channel_layout_custom_init() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret = avutil.av_channel_layout_custom_init( - layout.unsafe_origin_cast[MutExternalOrigin](), - 2, - ) - assert_equal(ret, 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_from_mask() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret, 0) - assert_equal(layout[].nb_channels, 2) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_from_string() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret = avutil.av_channel_layout_from_string( - layout.unsafe_origin_cast[MutExternalOrigin](), - "stereo".as_c_string_slice() - .unsafe_ptr() - .as_immutable() - .unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_equal(ret, 0) - assert_equal(layout[].nb_channels, 2) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_default() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - avutil.av_channel_layout_default( - layout.unsafe_origin_cast[MutExternalOrigin](), - 2, - ) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_standard() raises: - var opaque = alloc[OpaquePointer[MutExternalOrigin]](1) - memset(opaque, 0, 1) - var layout = avutil.av_channel_layout_standard( - opaque.unsafe_origin_cast[MutExternalOrigin](), - ) - assert_true(Bool(layout)) - - -def test_av_channel_layout_uninit() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret, 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_copy() raises: - var src = alloc[AVChannelLayout](1) - memset(src, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - src.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var dst = alloc[AVChannelLayout](1) - memset(dst, 0, 1) - var ret2 = avutil.av_channel_layout_copy( - dst.unsafe_origin_cast[MutExternalOrigin](), - src.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_equal(ret2, 0) - assert_equal(dst[].nb_channels, 2) - avutil.av_channel_layout_uninit(dst.unsafe_origin_cast[MutExternalOrigin]()) - avutil.av_channel_layout_uninit(src.unsafe_origin_cast[MutExternalOrigin]()) - - -def test_av_channel_layout_describe() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var buf = alloc[c_char](64) - var ret2 = avutil.av_channel_layout_describe( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - buf.unsafe_origin_cast[MutExternalOrigin](), - 64, - ) - assert_true(ret2 >= 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_channel_from_index() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var ch = avutil.av_channel_layout_channel_from_index( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - 0, - ) - assert_equal(Int(ch), Int(AVChannel.AV_CHAN_FRONT_LEFT._value)) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_index_from_channel() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var idx = avutil.av_channel_layout_index_from_channel( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - AVChannel.AV_CHAN_FRONT_RIGHT._value, - ) - assert_true(idx >= 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_index_from_string() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var idx = avutil.av_channel_layout_index_from_string( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - "FR".as_c_string_slice() - .unsafe_ptr() - .as_immutable() - .unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_equal(idx, 1) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_channel_from_string() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var ch = avutil.av_channel_layout_channel_from_string( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - "FR".as_c_string_slice() - .unsafe_ptr() - .as_immutable() - .unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_equal(Int(ch), Int(AVChannel.AV_CHAN_FRONT_RIGHT._value)) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_subset() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var mask = avutil.av_channel_layout_subset( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(Int(mask), Int(AV_CH_LAYOUT_STEREO)) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_check() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var ret2 = avutil.av_channel_layout_check( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_true(ret2 >= 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_compare() raises: - var layout1 = alloc[AVChannelLayout](1) - var layout2 = alloc[AVChannelLayout](1) - memset(layout1, 0, 1) - memset(layout2, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout1.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - var ret2 = avutil.av_channel_layout_from_mask( - layout2.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - assert_equal(ret2, 0) - var cmp_ret = avutil.av_channel_layout_compare( - layout1.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - layout2.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_equal(cmp_ret, 0) - avutil.av_channel_layout_uninit( - layout1.unsafe_origin_cast[MutExternalOrigin]() - ) - avutil.av_channel_layout_uninit( - layout2.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_ambisonic_order() raises: - # Stereo is not ambisonic; function returns negative AVERROR. Just check no crash. - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var order = avutil.av_channel_layout_ambisonic_order( - layout.as_immutable().unsafe_origin_cast[ImmutExternalOrigin](), - ) - assert_true(order < 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def test_av_channel_layout_retype() raises: - var layout = alloc[AVChannelLayout](1) - memset(layout, 0, 1) - var ret1 = avutil.av_channel_layout_from_mask( - layout.unsafe_origin_cast[MutExternalOrigin](), - AV_CH_LAYOUT_STEREO, - ) - assert_equal(ret1, 0) - var ret2 = avutil.av_channel_layout_retype( - layout.unsafe_origin_cast[MutExternalOrigin](), - AVChannelOrder.AV_CHANNEL_ORDER_NATIVE._value, - 0, - ) - assert_equal(ret2, 0) - avutil.av_channel_layout_uninit( - layout.unsafe_origin_cast[MutExternalOrigin]() - ) - - -def main() raises: - # TestSuite.discover_tests[__functions_in_module()]().run() - test_av_channel_name() - test_av_channel_description() - test_av_channel_from_string() - test_av_channel_layout_custom_init() - test_av_channel_layout_from_mask() - test_av_channel_layout_from_string() - test_av_channel_layout_default() - test_av_channel_layout_standard() - test_av_channel_layout_uninit() - test_av_channel_layout_describe() - test_av_channel_layout_channel_from_index() - test_av_channel_layout_index_from_channel() - test_av_channel_layout_index_from_string() - test_av_channel_layout_channel_from_string() - test_av_channel_layout_subset() - test_av_channel_layout_check() - test_av_channel_layout_compare() - test_av_channel_layout_ambisonic_order() - test_av_channel_layout_retype() diff --git a/tests/test_ffmpeg/test_avutil/test_error.mojo b/tests/test_ffmpeg/test_avutil/test_error.mojo deleted file mode 100644 index d946d31..0000000 --- a/tests/test_ffmpeg/test_avutil/test_error.mojo +++ /dev/null @@ -1,43 +0,0 @@ -from std.testing import TestSuite, assert_equal -from std.memory import memset -from std.ffi import c_uchar, c_int, c_char -from std.sys._libc_errno import ErrNo - -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.avutil.error import FFERRTAG -from std.reflection import get_type_name - - -def test_FFERRTAG() raises: - """Check: - Basic 0,1,2,3 values make sense. - That 'B' and named StaticStrings compile into the variant. - """ - assert_equal(FFERRTAG(0, 1, 2, 3), -50462976) - comptime s: StaticString = "S" - comptime f: StaticString = "F" - assert_equal(FFERRTAG(0, "B", s, f), -1179861504) - - -def test_AVERROR() raises: - assert_equal(AVERROR(ErrNo.ENOENT.value), -2) - assert_equal(AVERROR(ErrNo.EIO.value), -5) - assert_equal(AVERROR(ErrNo.ENOMEM.value), -12) - assert_equal(AVERROR(ErrNo.EINVAL.value), -22) - assert_equal(AVERROR(ErrNo.EAGAIN.value), -11) - assert_equal(AVERROR(ErrNo.EBUSY.value), -16) - assert_equal(AVERROR(ErrNo.EPERM.value), -1) - - -def test_AVERROR_EOF() raises: - # 00100000010001100100111101000101, 20464F45 - # print(hex(ord('E'))) - # print(hex(ord('O'))) - # print(hex(ord('F'))) - # print(hex(ord(' '))) - # print("actual hex: ", hex(AVERROR_EOF)) - assert_equal(AVERROR_EOF, -541478725) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_avutil/test_frame.mojo b/tests/test_ffmpeg/test_avutil/test_frame.mojo deleted file mode 100644 index 64ee33e..0000000 --- a/tests/test_ffmpeg/test_avutil/test_frame.mojo +++ /dev/null @@ -1,515 +0,0 @@ -from std.testing import TestSuite, assert_equal, assert_true -from std.memory import memset, alloc -from std.ffi import c_uchar, c_int, c_char, external_call -from std.sys._libc_errno import ErrNo -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat - -from ash_dynamics.ffmpeg.avutil.frame import ( - AVFrame, - AVFrameSideData, - AVFrameSideDataType, -) -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg import avutil - - -def test_av_frame_alloc() raises: - var frame = avutil.av_frame_alloc() - assert_equal(frame[].width, 0) - assert_equal(frame[].height, 0) - assert_equal(frame[].format, -1) - assert_equal(frame[].nb_samples, 0) - assert_equal(frame[].nb_side_data, 0) - assert_equal(frame[].flags, 0) - - fn accept_frame(frame: UnsafePointer[AVFrame, MutExternalOrigin]) raises: - "Test whether frame survives being passed by reference." - assert_equal(frame[].width, 0) - - accept_frame(frame) - assert_equal(frame[].flags, 0) - avutil.av_frame_free(frame) - - -def test_av_frame_free() raises: - var frame_ptr = alloc[UnsafePointer[AVFrame, MutExternalOrigin]](1) - frame_ptr[] = avutil.av_frame_alloc() - avutil.av_frame_free(frame_ptr) - frame_ptr.free() - - -def test_av_frame_ref() raises: - var src = avutil.av_frame_alloc() - var dst = avutil.av_frame_alloc() - memset(dst, 0, 1) - src[].width = 640 - src[].height = 480 - src[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret1 = avutil.av_frame_get_buffer(src, 0) - assert_equal(ret1, 0) - var immut_ptr = src - var ret2 = avutil.av_frame_ref( - dst, - immut_ptr, - ) - assert_equal(ret2, 0) - assert_equal(dst[].width, 640) - assert_equal(dst[].height, 480) - avutil.av_frame_unref(dst) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_av_frame_replace() raises: - var src = avutil.av_frame_alloc() - var dst = avutil.av_frame_alloc() - src[].width = 320 - src[].height = 240 - var ret = avutil.av_frame_replace( - dst, - src, - ) - assert_equal(ret, 0) - assert_equal(dst[].width, 320) - assert_equal(dst[].height, 240) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_av_frame_clone() raises: - var src = avutil.av_frame_alloc() - src[].width = 1280 - src[].height = 720 - src[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - _ = avutil.av_frame_get_buffer(src, 0) - var clone = avutil.av_frame_clone(src) - assert_true(Bool(clone)) - assert_equal(clone[].width, 1280) - assert_equal(clone[].height, 720) - avutil.av_frame_free(src) - var clone_ptr = alloc[UnsafePointer[AVFrame, MutExternalOrigin]](1) - clone_ptr[] = clone - avutil.av_frame_free(clone_ptr) - clone_ptr.free() - - -def test_av_frame_unref() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 100 - avutil.av_frame_unref(frame) - assert_equal(frame[].width, 0) - avutil.av_frame_free(frame) - - -def test_av_frame_move_ref() raises: - var src = avutil.av_frame_alloc() - var dst = avutil.av_frame_alloc() - src[].width = 800 - src[].height = 600 - avutil.av_frame_move_ref( - dst, - src, - ) - assert_equal(dst[].width, 800) - assert_equal(dst[].height, 600) - assert_equal(src[].width, 0) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_av_frame_get_buffer() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 64 - frame[].height = 64 - frame[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - - # Side data should be null before buffer init (av_frame_alloc zeroes the frame) - assert_equal(frame[].nb_side_data, 0) - assert_true(not Bool(frame[].side_data)) - - var ret = avutil.av_frame_get_buffer(frame, 0) - assert_equal(ret, 0) - - # Input fields should be unchanged - assert_equal(frame[].width, 64) - assert_equal(frame[].height, 64) - assert_equal(frame[].format, AVPixelFormat.AV_PIX_FMT_YUV420P._value) - - # YUV420P has 3 planes; data and buf should be populated for each - assert_true(Bool(frame[].data[0])) - assert_true(Bool(frame[].data[1])) - assert_true(Bool(frame[].data[2])) - assert_true(Bool(frame[].buf[0])) - - # extended_data should point to the data array - assert_true(Bool(frame[].extended_data)) - - # linesize should be set for each plane (Y=64, U/V=32 for 64x64) - assert_true(frame[].linesize[0] >= 64) - assert_true(frame[].linesize[1] >= 32) - assert_true(frame[].linesize[2] >= 32) - - # Side data should stay null after buffer init; if corrupted, av_frame_free will crash - assert_equal(frame[].nb_side_data, 0) - assert_true(not Bool(frame[].side_data)) - avutil.av_frame_free(frame) - - -def test_av_frame_is_writable() raises: - var frame = avutil.av_frame_alloc() - # A frame without a buffer is not writable. - assert_equal( - avutil.av_frame_is_writable(frame), - 0, - ) - avutil.av_frame_free(frame) - - -def test_av_frame_make_writable() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 64 - frame[].height = 64 - frame[].format = 0 # AV_PIX_FMT_YUV420P - _ = avutil.av_frame_get_buffer(frame, 0) - var ret = avutil.av_frame_make_writable(frame) - assert_equal(ret, 0) - assert_equal( - avutil.av_frame_is_writable(frame), - 1, - ) - avutil.av_frame_free(frame) - - -def test_av_frame_copy() raises: - var src = avutil.av_frame_alloc() - var dst = avutil.av_frame_alloc() - src[].width = 64 - src[].height = 64 - src[].format = 0 # AV_PIX_FMT_YUV420P - dst[].width = 64 - dst[].height = 64 - dst[].format = 0 - _ = avutil.av_frame_get_buffer(src, 0) - _ = avutil.av_frame_get_buffer(dst, 0) - var ret = avutil.av_frame_copy( - dst, - src, - ) - assert_equal(ret, 0) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_av_frame_copy_props() raises: - var src = avutil.av_frame_alloc() - var dst = avutil.av_frame_alloc() - src[].pts = 42 - src[].flags = 1 - var ret = avutil.av_frame_copy_props( - dst, - src, - ) - assert_equal(ret, 0) - assert_equal(dst[].pts, 42) - assert_equal(dst[].flags, 1) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_av_frame_get_plane_buffer() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 64 - frame[].height = 64 - frame[].format = 0 # AV_PIX_FMT_YUV420P - _ = avutil.av_frame_get_buffer(frame, 0) - var buf = avutil.av_frame_get_plane_buffer(frame, 0) - assert_true(Bool(buf)) - avutil.av_frame_free(frame) - - -def test_av_frame_new_side_data() raises: - var frame = avutil.av_frame_alloc() - var sd = avutil.av_frame_new_side_data( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - ) - assert_true(Bool(sd)) - assert_equal(frame[].nb_side_data, 1) - avutil.av_frame_free(frame) - - -def test_av_frame_new_side_data_from_buf() raises: - var frame = avutil.av_frame_alloc() - var buf = avutil.av_buffer_alloc(128) - var sd = avutil.av_frame_new_side_data_from_buf( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - buf, - ) - assert_true(Bool(sd)) - assert_equal(frame[].nb_side_data, 1) - avutil.av_frame_free(frame) - - -def test_av_frame_get_side_data() raises: - var frame = avutil.av_frame_alloc() - _ = avutil.av_frame_new_side_data( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - ) - var sd = avutil.av_frame_get_side_data( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - ) - assert_true(Bool(sd)) - avutil.av_frame_free(frame) - - -def test_av_frame_remove_side_data() raises: - var frame = avutil.av_frame_alloc() - _ = avutil.av_frame_new_side_data( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - ) - assert_equal(frame[].nb_side_data, 1) - avutil.av_frame_remove_side_data( - frame, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - ) - assert_equal(frame[].nb_side_data, 0) - avutil.av_frame_free(frame) - - -def test_av_frame_apply_cropping() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 64 - frame[].height = 64 - frame[].format = 0 # AV_PIX_FMT_YUV420P - _ = avutil.av_frame_get_buffer(frame, 0) - frame[].crop_top = 8 - frame[].crop_bottom = 8 - frame[].crop_left = 8 - frame[].crop_right = 8 - var ret = avutil.av_frame_apply_cropping(frame, 0) - if ret != 0: - print( - "av_frame_apply_cropping error: {}".format(avutil.av_err2str(ret)) - ) - assert_equal(ret, 0) - avutil.av_frame_free(frame) - - -def test_av_frame_side_data_name() raises: - var name = avutil.av_frame_side_data_name( - AVFrameSideDataType.AV_FRAME_DATA_PANSCAN._value - ) - assert_true(Bool(name)) - - -def test_av_frame_side_data_desc() raises: - var desc = avutil.av_frame_side_data_desc( - AVFrameSideDataType.AV_FRAME_DATA_PANSCAN._value - ) - assert_true(Bool(desc)) - - -def test_av_frame_side_data_free() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var entry = avutil.av_frame_side_data_new( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - avutil.av_frame_side_data_free( - sd, - nb_sd, - ) - assert_equal(nb_sd[], 0) - avutil.av_freep(sd) - # nb_sd.free() - - -def test_av_frame_side_data_new() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var entry = avutil.av_frame_side_data_new( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 1, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - avutil.av_frame_side_data_free( - sd, - nb_sd, - ) - assert_equal(nb_sd[], 0) - - -def test_av_frame_side_data_add() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var buf_ptr = alloc[UnsafePointer[AVBufferRef, MutExternalOrigin]](1) - buf_ptr[] = avutil.av_buffer_alloc(128) - var entry = avutil.av_frame_side_data_add( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - buf_ptr, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - avutil.av_freep(buf_ptr) - avutil.av_frame_side_data_free(sd, nb_sd) - - -def test_av_frame_side_data_clone() raises: - var src_sd = AVFrameSideData.alloc_triple_ptr() - var src_nb_sd = alloc[c_int](1) - src_nb_sd[] = 0 - var src_entry = avutil.av_frame_side_data_new( - src_sd, - src_nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 1, - 0, - ) - assert_true(Bool(src_entry)) - assert_equal(src_nb_sd[], 1) - var dst_sd = AVFrameSideData.alloc_triple_ptr() - var dst_nb_sd = alloc[c_int](1) - dst_nb_sd[] = 0 - var ret = avutil.av_frame_side_data_clone( - dst_sd, - dst_nb_sd, - src_entry.as_immutable(), - 0, - ) - assert_equal(ret, 0) - assert_equal(dst_nb_sd[], 1) - avutil.av_frame_side_data_free(dst_sd, dst_nb_sd) - avutil.av_frame_side_data_free( - src_sd, - src_nb_sd, - ) - - -def test_av_frame_side_data_get_c() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var entry = avutil.av_frame_side_data_new( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - - var found = avutil.av_frame_side_data_get_c( - sd[].bitcast[UnsafePointer[AVFrameSideData, ImmutExternalOrigin]](), - nb_sd[], - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - ) - assert_true(Bool(found)) - avutil.av_frame_side_data_free( - sd, - nb_sd, - ) - - -def test_av_frame_side_data_remove() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var entry = avutil.av_frame_side_data_new( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - 128, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - avutil.av_frame_side_data_remove( - sd, - nb_sd, - AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value, - ) - assert_equal(nb_sd[], 0) - avutil.av_freep(sd) - - -def test_av_frame_side_data_remove_by_props() raises: - var sd = AVFrameSideData.alloc_triple_ptr() - var nb_sd = alloc[c_int](1) - nb_sd[] = 0 - var type = AVFrameSideDataType.AV_FRAME_DATA_REPLAYGAIN._value - var entry = avutil.av_frame_side_data_new( - sd, - nb_sd, - type, - 128, - 0, - ) - assert_true(Bool(entry)) - assert_equal(nb_sd[], 1) - # AV_FRAME_DATA_REPLAYGAIN has AV_SIDE_DATA_PROP_GLOBAL; removing by its - # own props should free the entry and reset nb_sd to 0. - var desc = avutil.av_frame_side_data_desc(type) - avutil.av_frame_side_data_remove_by_props( - sd, - nb_sd, - desc[].props, - ) - assert_equal(nb_sd[], 0) - avutil.av_freep(sd) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() - - # test_av_frame_alloc() - # test_av_frame_free() - # test_av_frame_ref() - # test_av_frame_replace() - # test_av_frame_clone() - # test_av_frame_unref() - # test_av_frame_move_ref() - # test_av_frame_get_buffer() - # test_av_frame_is_writable() - # test_av_frame_make_writable() - # test_av_frame_copy() - # test_av_frame_copy_props() - # test_av_frame_get_plane_buffer() - # test_av_frame_new_side_data() - # test_av_frame_new_side_data_from_buf() - # test_av_frame_get_side_data() - # test_av_frame_remove_side_data() - # test_av_frame_side_data_name() - # test_av_frame_side_data_desc() - # test_av_frame_apply_cropping() - # test_av_frame_side_data_new() - # test_av_frame_side_data_add() - # test_av_frame_side_data_free() - # test_av_frame_side_data_clone() - # test_av_frame_side_data_get_c() - # test_av_frame_side_data_remove() - # test_av_frame_side_data_remove_by_props() diff --git a/tests/test_ffmpeg/test_avutil/test_mathematics.mojo b/tests/test_ffmpeg/test_avutil/test_mathematics.mojo deleted file mode 100644 index 43b5ac0..0000000 --- a/tests/test_ffmpeg/test_avutil/test_mathematics.mojo +++ /dev/null @@ -1,51 +0,0 @@ -from std.testing import TestSuite, assert_equal -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.mathematics import AVRounding - - -def test_AVRounding() raises: - assert_equal(AVRounding.AV_ROUND_ZERO.value, 0) - assert_equal(AVRounding.AV_ROUND_INF.value, 1) - assert_equal(AVRounding.AV_ROUND_DOWN.value, 2) - assert_equal(AVRounding.AV_ROUND_UP.value, 3) - assert_equal(AVRounding.AV_ROUND_NEAR_INF.value, 5) - assert_equal(AVRounding.AV_ROUND_PASS_MINMAX.value, 8192) - - -def test_av_compare_ts() raises: - var tb = AVRational(num=1, den=1) - # ts_a < ts_b -> -1 - assert_equal(avutil.av_compare_ts(0, tb, 1, tb), -1) - # ts_a == ts_b -> 0 - assert_equal(avutil.av_compare_ts(1, tb, 1, tb), 0) - # ts_a > ts_b -> 1 - assert_equal(avutil.av_compare_ts(2, tb, 1, tb), 1) - - -def test_av_rescale_rnd() raises: - var rnd = AVRounding.AV_ROUND_NEAR_INF.value - # a * b / c: 100 * 2 / 2 = 100 - assert_equal(avutil.av_rescale_rnd(100, 2, 2, rnd), 100) - # 50 * 4 / 2 = 100 - assert_equal(avutil.av_rescale_rnd(50, 4, 2, rnd), 100) - # 0 * anything = 0 - assert_equal(avutil.av_rescale_rnd(0, 1000, 1, rnd), 0) - - -def test_av_rescale_q_rnd() raises: - var rnd = AVRounding.AV_ROUND_NEAR_INF.value - # a=0 -> 0 - var bq = AVRational(num=1, den=25) - var cq = AVRational(num=2, den=12800) - assert_equal(avutil.av_rescale_q_rnd(0, bq, cq, rnd), 0) - # a * (1/1) / (1/1) = a - var one = AVRational(num=1, den=1) - assert_equal(avutil.av_rescale_q_rnd(100, one, one, rnd), 100) - # a * (1/1) / (2/1) = a/2 - var two = AVRational(num=2, den=1) - assert_equal(avutil.av_rescale_q_rnd(100, one, two, rnd), 50) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_ffmpeg_h264_to_fmp4.mojo b/tests/test_ffmpeg/test_ffmpeg_h264_to_fmp4.mojo deleted file mode 100644 index 5e02eb5..0000000 --- a/tests/test_ffmpeg/test_ffmpeg_h264_to_fmp4.mojo +++ /dev/null @@ -1,589 +0,0 @@ -from std.testing import TestSuite, assert_equal -from std.pathlib import Path -from std.memory import memset -from std.itertools import count -import std.os -from std.ffi import ( - c_uchar, - c_int, - c_char, - c_long_long, - c_float, - c_uint, - c_double, - c_ulong_long, -) -from std.sys._libc_errno import ErrNo - -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.buffer_internal import AVBuffer -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.packet import ( - AVPacketSideData, - AVPacketSideDataType, -) -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.avformat.avformat import AVFormatContext, AVStream -from ash_dynamics.ffmpeg.avformat.avio import AVIOContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.swscale.swscale import SwsContext -from ash_dynamics.ffmpeg.avformat.avformat import ( - AVOutputFormat, - AVFormatContext, - AVFMT_GLOBALHEADER, - AVFMT_NOFILE, -) -from ash_dynamics.ffmpeg.avformat import AVIO_FLAG_WRITE -from ash_dynamics.ffmpeg import avformat -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.channel_layout import ( - AVChannelLayout, - AV_CHANNEL_LAYOUT_STEREO, -) -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.swscale.swscale import SwsFlags -from ash_dynamics.ffmpeg.avcodec.avcodec import AV_CODEC_FLAG_GLOBAL_HEADER -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.swscale import SwsFilter -from ash_dynamics.ffmpeg import swscale -from ash_dynamics.ffmpeg import swrsample -from ash_dynamics.ffmpeg.swrsample import SwrContext -from std.utils import StaticTuple - - -comptime STREAM_FRAME_RATE = 25 -comptime STREAM_DURATION = 10.0 -comptime STREAM_PIX_FMT = AVPixelFormat.AV_PIX_FMT_YUV420P._value - -comptime SCALE_FLAGS = SwsFlags.SWS_BICUBIC - - -@fieldwise_init -struct OutputStream(Movable): - var st: UnsafePointer[AVStream, origin=MutExternalOrigin] - var enc: UnsafePointer[AVCodecContext, origin=MutExternalOrigin] - var next_pts: c_long_long - var samples_count: c_int - var frame: UnsafePointer[AVFrame, origin=MutExternalOrigin] - var tmp_frame: UnsafePointer[AVFrame, origin=MutExternalOrigin] - var tmp_pkt: UnsafePointer[AVPacket, origin=MutExternalOrigin] - var t: c_float - var tincr: c_float - var tincr2: c_float - var sws_ctx: UnsafePointer[SwsContext, origin=MutExternalOrigin] - var swr_ctx: UnsafePointer[SwrContext, origin=MutExternalOrigin] - - fn __init__(out self) raises: - self.st = UnsafePointer[AVStream, MutExternalOrigin]() - self.enc = UnsafePointer[AVCodecContext, MutExternalOrigin]() - self.next_pts = c_long_long(0) - self.samples_count = c_int(0) - self.frame = UnsafePointer[AVFrame, MutExternalOrigin]() - self.tmp_frame = UnsafePointer[AVFrame, MutExternalOrigin]() - self.tmp_pkt = UnsafePointer[AVPacket, MutExternalOrigin]() - self.t = c_float(0) - self.tincr = c_float(0) - self.tincr2 = c_float(0) - self.sws_ctx = UnsafePointer[SwsContext, MutExternalOrigin]() - self.swr_ctx = UnsafePointer[SwrContext, MutExternalOrigin]() - - fn __del__(deinit self): - if self.frame: - avutil.av_frame_free(self.frame) - if self.tmp_frame: - avutil.av_frame_free(self.tmp_frame) - if self.tmp_pkt: - avcodec.av_packet_free(self.tmp_pkt) - if self.enc: - avcodec.avcodec_free_context(self.enc) - - -def alloc_frame( - pix_fmt: AVPixelFormat.ENUM_DTYPE, - width: c_int, - height: c_int, -) raises -> UnsafePointer[AVFrame, MutExternalOrigin]: - var frame = avutil.av_frame_alloc() - - frame[].format = pix_fmt - frame[].width = width - frame[].height = height - - ret = avutil.av_frame_get_buffer( - frame.unsafe_origin_cast[MutExternalOrigin](), 0 - ) - if ret < 0: - std.os.abort("Failed to allocate frame buffer") - - return frame - - -def open_video( - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - video_codec: UnsafePointer[AVCodec, ImmutExternalOrigin], - mut ost: OutputStream, - opt_arg: UnsafePointer[AVDictionary, ImmutExternalOrigin], -) raises: - var ret: c_int = 0 - var c = ost.enc - # NOTE: We need to add an override to avcodec_open2 that makes - # an internal null pointer. Debug mode otherwise fails on this. - var opt = UnsafePointer[AVDictionary, MutExternalOrigin]() - var opt_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt_ptr[] = opt - print("im opening a video") - - _ = avcodec.avcodec_open2(c, video_codec, opt_ptr) - # av_dict_free(&opt); - - ost.frame = alloc_frame( - c[].pix_fmt, c[].width, c[].height - ).unsafe_origin_cast[MutExternalOrigin]() - if not ost.frame: - std.os.abort("Failed to allocate video frame") - - ost.tmp_frame = UnsafePointer[AVFrame, MutExternalOrigin]() - if c[].pix_fmt != AVPixelFormat.AV_PIX_FMT_YUV420P._value: - ost.tmp_frame = alloc_frame( - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - c[].width, - c[].height, - ).unsafe_origin_cast[MutExternalOrigin]() - if not ost.tmp_frame: - std.os.abort("Failed to allocate temporary video frame") - - ret = avcodec.avcodec_parameters_from_context(ost.st[].codecpar, c) - if ret < 0: - std.os.abort("Failed to copy the stream parameters") - - _ = c - - -def add_stream( - mut ost: OutputStream, - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - codec: UnsafePointer[ - UnsafePointer[AVCodec, ImmutExternalOrigin], MutExternalOrigin - ], - codec_id: AVCodecID.ENUM_DTYPE, -) raises: - var i: c_int = 0 - var c = alloc[AVCodecContext](1) - - codec[] = avcodec.avcodec_find_encoder(codec_id) - if not codec[]: - std.os.abort("Failed to find encoder") - - ost.tmp_pkt = avcodec.av_packet_alloc() - if not ost.tmp_pkt: - std.os.abort("Failed to allocate AVPacket") - - ost.st = avformat.avformat_new_stream( - oc, - # Add a null pointer. - UnsafePointer[AVCodec, ImmutExternalOrigin](), - ) - if not ost.st: - std.os.abort("Failed to allocate stream") - - ost.st[].id = c_int(oc[].nb_streams - 1) - - c = avcodec.avcodec_alloc_context3(codec[]) - if not c: - std.os.abort("Failed to allocate encoding context") - - ost.enc = c - - ref codec_type = codec[][].type - if codec_type == AVMediaType.AVMEDIA_TYPE_AUDIO._value: - if not codec[][].sample_fmts: - c[].sample_fmt = AVSampleFormat.AV_SAMPLE_FMT_FLTP._value - else: - # FIXME: Note that sample_fmts is deprecated and we should be using - # avcodec_get_supported_config - c[].sample_fmt = codec[][].sample_fmts[] - c[].bit_rate = 64000 - c[].sample_rate = 44100 - if codec[][].supported_samplerates: - c[].sample_rate = codec[][].supported_samplerates[] - for i in count(): - if not codec[][].supported_samplerates[i]: - break - if codec[][].supported_samplerates[i] == 44100: - c[].sample_rate = 44100 - - var layout = alloc[AVChannelLayout](1) - layout[] = AV_CHANNEL_LAYOUT_STEREO - var dst = UnsafePointer(to=c[].ch_layout) - ret = avutil.av_channel_layout_copy(dst, layout) - if ret < 0: - std.os.abort("Failed to copy channel layout") - - ost.st[].time_base = AVRational(num=1, den=c[].sample_rate) - - elif codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO._value: - c[].codec_id = codec_id - c[].bit_rate = 400000 - # Resolution must be multople of two - c[].width = 352 - c[].height = 288 - - # Timebase: This is the fundamental unit of time (in seconds) in terms - # of which frame timestamps are represented. For fixed-gps content - # timebase should be 1/framerate and timestamp increments should be identical - # to 1. - ost.st[].time_base = AVRational(num=1, den=STREAM_FRAME_RATE) - c[].time_base = ost.st[].time_base - - c[].gop_size = 12 # Emit one intra frame every twelve frames at most - c[].pix_fmt = STREAM_PIX_FMT - if codec_id == AVCodecID.AV_CODEC_ID_MPEG2VIDEO._value: - # Just for testing, we also add B-frames - c[].max_b_frames = 2 - - if codec_id == AVCodecID.AV_CODEC_ID_MPEG1VIDEO._value: - # Needed to avoid using macroblocks in which some coeffs overflow. - # This does not happen with normal video, it just happens here as - # the motion of the chroma plane does not match the luma plane. - c[].mb_decision = 2 - - pass - - if oc[].oformat[].flags & AVFMT_GLOBALHEADER: - c[].flags |= AV_CODEC_FLAG_GLOBAL_HEADER - - # ost.enc = ret - - -def log_packet( - fmt_ctx: UnsafePointer[AVFormatContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) raises: - print( - "pts:{} dts:{} duration:{} stream_index:{}".format( - pkt[].pts, - pkt[].dts, - pkt[].duration, - pkt[].stream_index, - ) - ) - - -def fill_yuv_image( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - frame_index: c_int, - width: c_int, - height: c_int, -) raises: - var x: c_int = 0 - var y: c_int = 0 - var i: c_int = frame_index - for y in range(height): - for x in range(width): - frame[].data[0][y * frame[].linesize[0] + x] = c_uchar( - x + y + i * 3 - ) - for y in range(height / 2): - for x in range(width / 2): - frame[].data[1][y * frame[].linesize[1] + x] = c_uchar( - 128 + y + i * 2 - ) - frame[].data[2][y * frame[].linesize[2] + x] = c_uchar( - 64 + x + i * 5 - ) - - -def get_video_frame( - mut ost: OutputStream, -) raises -> UnsafePointer[AVFrame, MutExternalOrigin]: - var c = ost.enc - - var comparison = avutil.av_compare_ts( - ost.next_pts, - c[].time_base, - c_long_long(Int(STREAM_DURATION)), - AVRational(num=1, den=1), - ) - - if comparison > 0: - return UnsafePointer[AVFrame, MutExternalOrigin]() - - _ = comparison - _ = c - - if avutil.av_frame_make_writable(ost.frame) < 0: - std.os.abort("Failed to make frame writable") - - if c[].pix_fmt != AVPixelFormat.AV_PIX_FMT_YUV420P._value: - if not ost.sws_ctx: - ost.sws_ctx = swscale.sws_getContext( - c[].width, - c[].height, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - c[].width, - c[].height, - c[].pix_fmt, - SCALE_FLAGS.value, - UnsafePointer[SwsFilter, MutExternalOrigin](), - UnsafePointer[SwsFilter, MutExternalOrigin](), - UnsafePointer[c_double, ImmutExternalOrigin](), - ) - if not ost.sws_ctx: - std.os.abort("Failed to initialize conversion context") - - # API wise, this seems problematic no? These are all long longs - # and we are converting to ints. - fill_yuv_image( - ost.tmp_frame, - c_int(ost.next_pts), - c_int(c[].width), - c_int(c[].height), - ) - - # TODO: There has to be a better way to do this. - # We should at least not be doing the allocations in a hot loop. - var src_slice = alloc[UnsafePointer[c_uchar, ImmutExternalOrigin]]( - len(ost.tmp_frame[].data) - ) - for i in range(len(ost.tmp_frame[].data)): - src_slice[i] = ost.tmp_frame[].data[i].as_immutable() - - var dst = alloc[UnsafePointer[c_uchar, MutExternalOrigin]]( - len(ost.frame[].data) - ) - for i in range(len(ost.frame[].data)): - dst[i] = ost.frame[].data[i] - - # NOTE: https://github.com/modular/modular/pull/5715 - # adds unsafe_ptr to StaticTuple, which is needed for this. - var res = swscale.sws_scale( - ost.sws_ctx, - src_slice, - ost.tmp_frame[].linesize.unsafe_ptr(), - 0, - c[].height, - dst, - ost.frame[].linesize.unsafe_ptr(), - ) - if res < 0: - std.os.abort("Failed to scale image") - else: - fill_yuv_image( - ost.frame, c_int(ost.next_pts), c_int(c[].width), c_int(c[].height) - ) - - # NOTE They use ++ which I think increments the next ptr itself actually, but - # assignes the previous value to pts. - ost.frame[].pts = ost.next_pts - ost.next_pts += 1 - - return ost.frame - - -def write_frame( - fmt_ctx: UnsafePointer[AVFormatContext, MutExternalOrigin], - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - st: UnsafePointer[AVStream, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) raises -> c_int: - # TODO: Check pkt. It looks completely invalid. - var ret = c_int(0) - ret = avcodec.avcodec_send_frame(c, frame) - if ret < 0: - std.os.abort("Failed to send frame to encoder") - _ = frame - while ret >= 0: - ret = avcodec.avcodec_receive_packet(c, pkt) - - if ret == AVERROR(ErrNo.EAGAIN.value) or ret == Int32(AVERROR_EOF): - break - elif ret < 0: - print(avutil.av_err2str(ret)) - std.os.abort( - "Failed to receive packet from encoder with ret val: {}".format( - ret - ) - ) - - avcodec.av_packet_rescale_ts(pkt, c[].time_base, st[].time_base) - pkt[].stream_index = st[].index - - log_packet(fmt_ctx, pkt) - ret = avformat.av_interleaved_write_frame(fmt_ctx, pkt) - if ret < 0: - std.os.abort("Failed to write output packet") - - # _ = avcodec - # _ = avformat - return c_int(ret == Int32(AVERROR_EOF)) - - -def write_video_frame( - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - mut ost: OutputStream, -) raises -> c_int: - var ret = write_frame( - fmt_ctx=oc, - c=ost.enc, - st=ost.st, - frame=get_video_frame(ost), - pkt=ost.tmp_pkt, - ) - return ret - - -def test_av_mux_example() raises: - """From: https://www.ffmpeg.org/doxygen/8.0/mux_8c-example.html.""" - var video_st = OutputStream() - # NOTE: Not interested in audio at the moment. - # var audio_st = OutputStream() - var fmt = alloc[UnsafePointer[AVOutputFormat, ImmutExternalOrigin]](1) - var oc = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - # var oc = UnsafePointer[AVFormatContext, MutAnyOrigin]() - # NOTE: Not interested in audio at the moment. - # var audio_codec = AVCodec() - var video_codec = alloc[UnsafePointer[AVCodec, ImmutExternalOrigin]](1) - var ret = c_int(0) - var have_video = c_int(0) - # NOTE: Not interested in audio at the moment. - # var have_audio = c_int(0) - var encode_video = c_int(0) - # var encode_audio = c_int(0) - var opt = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt[] = UnsafePointer[ - AVDictionary, MutExternalOrigin - ]() # NULL, let FFmpeg manage - var opt2 = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt2[] = UnsafePointer[ - AVDictionary, MutExternalOrigin - ]() # NULL, let FFmpeg manage - var i = c_int(0) - - var test_data_root = std.os.getenv("PIXI_PROJECT_ROOT") - # Currently auto gens frames - # var input_filename: String = ( - # "{}/test_data/testsrc_320x180_30fps_2s.h264".format(test_data_root) - # ) - var output_filename: String = ( - "{}/test_data/dash_mojo/testsrc_320x180_30fps_2s.mpd".format( - test_data_root - ) - ) - var parent_path_parts = Path(output_filename).parts()[:-1] - var parent_path = Path(String(std.os.sep).join(parent_path_parts)) - std.os.makedirs(parent_path, exist_ok=True) - - # FIXME: Tryout without any flags, just h264 to mp4. - # ret = avformat.alloc_output_context(oc, output_filename) - - ret = avformat.alloc_output_context( - ctx=oc, - filename=output_filename, - ) - if not oc or ret < 0: - std.os.abort("Failed to allocate output context") - # Note: The example: mux.c will switch to 'mpeg' on failure. In our case - # however, we want to be strict about the expected behavior. - - fmt = UnsafePointer(to=oc[][].oformat) - video_codec = UnsafePointer(to=oc[][].video_codec) - - if fmt[][].video_codec != AVCodecID.AV_CODEC_ID_NONE._value: - print("video codec is not none: ", fmt[][].video_codec) - add_stream(video_st, oc[], video_codec, fmt[][].video_codec) - have_video = 1 - encode_video = 1 - else: - print("video codec is none") - # if fmt[].audio_codec != AV_CODEC_ID_NONE: - # print("audio codec is not none") - # else: - # print("audio codec is none") - - if have_video: - open_video(oc[], video_codec[], video_st, opt[]) - - # Not interested in audio at the moment. - # if have_audio: - # open_audio(avformat, avcodec, oc[], audio_codec[], audio_st, opt[]) - - avformat.av_dump_format( - oc[], - 0, - output_filename, - 1, - ) - - if not (fmt[][].flags & AVFMT_NOFILE): - ret = avformat.avio_open( - UnsafePointer(to=oc[][].pb), - output_filename, - AVIO_FLAG_WRITE, - ) - if ret < 0: - std.os.abort("Failed to open output file: {}".format(ret)) - # TODO: Not sure if mojo can access stderror or not? - # Would be ideal since that would surface the error message to the user. - # fprintf(stderr, "Could not open '%s': %s\n", filename, - # av_err2str(ret)); - - print("writing header") - ret = avformat.avformat_write_header( - oc[], - opt2, - ) - print("dune writing") - if ret < 0: - std.os.abort("Failed to write header: {}".format(ret)) - # TODO: Not sure if mojo can access stderror or not? - # Would be ideal since that would surface the error message to the user. - # fprintf(stderr, "Error occurred when opening output file: %s\n", - # av_err2str(ret)); - - while encode_video: - # TODO: This if statement is only needed when using audio. - # if encode_video and avutil.av_compare_ts( - # video_st.next_pts, - # video_st.enc->time_base, - # audio_st.next_pts, - # audio_st.enc->time_base - # ) <= 0: - if encode_video: - var result = write_video_frame(oc[], video_st) - # print("Result: {}".format(result)) - encode_video = c_int(result == 0) - # else: - # encode_audio = !write_audio_frame(oc, &audio_st) - - ret = avformat.av_write_trailer(oc[]) - if ret < 0: - std.os.abort("Failed to write trailer: {}".format(ret)) - - if oc[]: - if not (fmt[][].flags & AVFMT_NOFILE) and oc[][].pb: - var pb_ptr = alloc[UnsafePointer[AVIOContext, MutExternalOrigin]](1) - pb_ptr[] = oc[][].pb - _ = avformat.avio_closep(pb_ptr) - oc[][].pb = pb_ptr[] - pb_ptr.free() - avformat.avformat_free_context(oc[]) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_ffmpeg_h264_to_mp4.mojo b/tests/test_ffmpeg/test_ffmpeg_h264_to_mp4.mojo deleted file mode 100644 index f1c2d3f..0000000 --- a/tests/test_ffmpeg/test_ffmpeg_h264_to_mp4.mojo +++ /dev/null @@ -1,585 +0,0 @@ -from std.testing import TestSuite, assert_equal -from std.memory import memset -from std.itertools import count -from std.pathlib import Path -import std.os -from std.ffi import ( - c_uchar, - c_int, - c_char, - c_long_long, - c_float, - c_uint, - c_double, - c_ulong_long, -) -from std.sys._libc_errno import ErrNo - -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.buffer_internal import AVBuffer -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.packet import ( - AVPacketSideData, - AVPacketSideDataType, -) -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.avformat.avformat import AVFormatContext, AVStream -from ash_dynamics.ffmpeg.avformat.avio import AVIOContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.codec import AVCodec -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg.avcodec.codec_par import AVCodecParameters -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.swscale.swscale import SwsContext -from ash_dynamics.ffmpeg.avformat.avformat import ( - AVOutputFormat, - AVFormatContext, - AVFMT_GLOBALHEADER, - AVFMT_NOFILE, -) -from ash_dynamics.ffmpeg.avformat import AVIO_FLAG_WRITE -from ash_dynamics.ffmpeg import avformat -from ash_dynamics.ffmpeg.avutil.avutil import AVMediaType -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.channel_layout import ( - AVChannelLayout, - AV_CHANNEL_LAYOUT_STEREO, -) -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat -from ash_dynamics.ffmpeg.swscale.swscale import SwsFlags -from ash_dynamics.ffmpeg.avcodec.avcodec import AV_CODEC_FLAG_GLOBAL_HEADER -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF -from ash_dynamics.ffmpeg.swscale import SwsFilter, SwsContext -from ash_dynamics.ffmpeg import swscale -from ash_dynamics.ffmpeg import swrsample -from ash_dynamics.ffmpeg.swrsample import SwrContext -from std.utils import StaticTuple - - -comptime STREAM_FRAME_RATE = 25 -comptime STREAM_DURATION = 10.0 -comptime STREAM_PIX_FMT = AVPixelFormat.AV_PIX_FMT_YUV420P._value - -comptime SCALE_FLAGS = SwsFlags.SWS_BICUBIC - - -@fieldwise_init -struct OutputStream(Movable): - var st: UnsafePointer[AVStream, origin=MutExternalOrigin] - var enc: UnsafePointer[AVCodecContext, origin=MutExternalOrigin] - var next_pts: c_long_long - var samples_count: c_int - var frame: UnsafePointer[AVFrame, origin=MutExternalOrigin] - var tmp_frame: UnsafePointer[AVFrame, origin=MutExternalOrigin] - var tmp_pkt: UnsafePointer[AVPacket, origin=MutExternalOrigin] - var t: c_float - var tincr: c_float - var tincr2: c_float - var sws_ctx: UnsafePointer[SwsContext, origin=MutExternalOrigin] - var swr_ctx: UnsafePointer[SwrContext, origin=MutExternalOrigin] - - fn __init__(out self) raises: - self.st = UnsafePointer[AVStream, MutExternalOrigin]() - self.enc = UnsafePointer[AVCodecContext, MutExternalOrigin]() - self.next_pts = c_long_long(0) - self.samples_count = c_int(0) - self.frame = UnsafePointer[AVFrame, MutExternalOrigin]() - self.tmp_frame = UnsafePointer[AVFrame, MutExternalOrigin]() - self.tmp_pkt = UnsafePointer[AVPacket, MutExternalOrigin]() - self.t = c_float(0) - self.tincr = c_float(0) - self.tincr2 = c_float(0) - self.sws_ctx = UnsafePointer[SwsContext, MutExternalOrigin]() - self.swr_ctx = UnsafePointer[SwrContext, MutExternalOrigin]() - - fn __del__(deinit self): - if self.frame: - avutil.av_frame_free(self.frame) - if self.tmp_frame: - avutil.av_frame_free(self.tmp_frame) - if self.tmp_pkt: - avcodec.av_packet_free(self.tmp_pkt) - if self.enc: - avcodec.avcodec_free_context(self.enc) - - -def alloc_frame( - pix_fmt: AVPixelFormat.ENUM_DTYPE, - width: c_int, - height: c_int, -) raises -> UnsafePointer[AVFrame, MutExternalOrigin]: - # var frame = alloc[AVFrame](1) - - var frame = avutil.av_frame_alloc() - - frame[].format = pix_fmt - frame[].width = width - frame[].height = height - - ret = avutil.av_frame_get_buffer(frame, 0) - if ret < 0: - std.os.abort("Failed to allocate frame buffer") - - return frame - - -def open_video( - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - video_codec: UnsafePointer[AVCodec, ImmutExternalOrigin], - mut ost: OutputStream, - opt_arg: UnsafePointer[AVDictionary, ImmutExternalOrigin], -) raises: - var ret: c_int = 0 - var c = ost.enc - # NOTE: We need to add an override to avcodec_open2 that makes - # an internal null pointer. Debug mode otherwise fails on this. - var opt = UnsafePointer[AVDictionary, MutExternalOrigin]() - var opt_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt_ptr[] = opt - print("im opening a video") - - _ = avcodec.avcodec_open2(c, video_codec, opt_ptr) - # av_dict_free(&opt); - - ost.frame = alloc_frame(c[].pix_fmt, c[].width, c[].height) - if not ost.frame: - std.os.abort("Failed to allocate video frame") - - ost.tmp_frame = UnsafePointer[AVFrame, MutExternalOrigin]() - if c[].pix_fmt != AVPixelFormat.AV_PIX_FMT_YUV420P._value: - ost.tmp_frame = alloc_frame( - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - c[].width, - c[].height, - ) - if not ost.tmp_frame: - std.os.abort("Failed to allocate temporary video frame") - - ret = avcodec.avcodec_parameters_from_context(ost.st[].codecpar, c) - if ret < 0: - std.os.abort("Failed to copy the stream parameters") - - _ = c - - -def add_stream( - mut ost: OutputStream, - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - codec: UnsafePointer[ - UnsafePointer[AVCodec, ImmutExternalOrigin], MutExternalOrigin - ], - codec_id: AVCodecID.ENUM_DTYPE, -) raises: - var i: c_int = 0 - # var c = alloc[AVCodecContext](1) - - codec[] = avcodec.avcodec_find_encoder(codec_id) - if not codec[]: - std.os.abort("Failed to find encoder") - - ost.tmp_pkt = avcodec.av_packet_alloc() - if not ost.tmp_pkt: - std.os.abort("Failed to allocate AVPacket") - - ost.st = avformat.avformat_new_stream( - oc, - # Add a null pointer. - UnsafePointer[AVCodec, ImmutExternalOrigin](), - ) - if not ost.st: - std.os.abort("Failed to allocate stream") - - ost.st[].id = c_int(oc[].nb_streams - 1) - - var c = avcodec.avcodec_alloc_context3(codec[]) - if not c: - std.os.abort("Failed to allocate encoding context") - - ost.enc = c - - ref codec_type = codec[][].type - if codec_type == AVMediaType.AVMEDIA_TYPE_AUDIO._value: - if not codec[][].sample_fmts: - c[].sample_fmt = AVSampleFormat.AV_SAMPLE_FMT_FLTP._value - else: - # FIXME: Note that sample_fmts is deprecated and we should be using - # avcodec_get_supported_config - c[].sample_fmt = codec[][].sample_fmts[] - c[].bit_rate = 64000 - c[].sample_rate = 44100 - if codec[][].supported_samplerates: - c[].sample_rate = codec[][].supported_samplerates[] - for i in count(): - if not codec[][].supported_samplerates[i]: - break - if codec[][].supported_samplerates[i] == 44100: - c[].sample_rate = 44100 - - var layout = alloc[AVChannelLayout](1) - layout[] = AV_CHANNEL_LAYOUT_STEREO - var dst = UnsafePointer(to=c[].ch_layout) - ret = avutil.av_channel_layout_copy(dst, layout) - if ret < 0: - std.os.abort("Failed to copy channel layout") - - ost.st[].time_base = AVRational(num=1, den=c[].sample_rate) - - elif codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO._value: - c[].codec_id = codec_id - c[].bit_rate = 400000 - # Resolution must be multople of two - c[].width = 352 - c[].height = 288 - - # Timebase: This is the fundamental unit of time (in seconds) in terms - # of which frame timestamps are represented. For fixed-gps content - # timebase should be 1/framerate and timestamp increments should be identical - # to 1. - ost.st[].time_base = AVRational(num=1, den=STREAM_FRAME_RATE) - c[].time_base = ost.st[].time_base - - c[].gop_size = 12 # Emit one intra frame every twelve frames at most - c[].pix_fmt = STREAM_PIX_FMT - if codec_id == AVCodecID.AV_CODEC_ID_MPEG2VIDEO._value: - # Just for testing, we also add B-frames - c[].max_b_frames = 2 - - if codec_id == AVCodecID.AV_CODEC_ID_MPEG1VIDEO._value: - # Needed to avoid using macroblocks in which some coeffs overflow. - # This does not happen with normal video, it just happens here as - # the motion of the chroma plane does not match the luma plane. - c[].mb_decision = 2 - - pass - - if oc[].oformat[].flags & AVFMT_GLOBALHEADER: - c[].flags |= AV_CODEC_FLAG_GLOBAL_HEADER - - # ost.enc = ret - - -def log_packet( - fmt_ctx: UnsafePointer[AVFormatContext, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) raises: - print( - "pts:{} dts:{} duration:{} stream_index:{}".format( - pkt[].pts, - pkt[].dts, - pkt[].duration, - pkt[].stream_index, - ) - ) - - -def fill_yuv_image( - frame: UnsafePointer[AVFrame, MutExternalOrigin], - frame_index: c_int, - width: c_int, - height: c_int, -) raises: - var x: c_int = 0 - var y: c_int = 0 - var i: c_int = frame_index - for y in range(height): - for x in range(width): - frame[].data[0][y * frame[].linesize[0] + x] = c_uchar( - x + y + i * 3 - ) - for y in range(height / 2): - for x in range(width / 2): - frame[].data[1][y * frame[].linesize[1] + x] = c_uchar( - 128 + y + i * 2 - ) - frame[].data[2][y * frame[].linesize[2] + x] = c_uchar( - 64 + x + i * 5 - ) - - -def get_video_frame( - mut ost: OutputStream, -) raises -> UnsafePointer[AVFrame, MutExternalOrigin]: - var c = ost.enc - - var comparison = avutil.av_compare_ts( - ost.next_pts, - c[].time_base, - c_long_long(Int(STREAM_DURATION)), - AVRational(num=1, den=1), - ) - - if comparison > 0: - return UnsafePointer[AVFrame, MutExternalOrigin]() - - _ = comparison - _ = c - - if avutil.av_frame_make_writable(ost.frame) < 0: - std.os.abort("Failed to make frame writable") - - if c[].pix_fmt != AVPixelFormat.AV_PIX_FMT_YUV420P._value: - if not ost.sws_ctx: - ost.sws_ctx = swscale.sws_getContext( - c[].width, - c[].height, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - c[].width, - c[].height, - c[].pix_fmt, - SCALE_FLAGS.value, - UnsafePointer[SwsFilter, MutExternalOrigin](), - UnsafePointer[SwsFilter, MutExternalOrigin](), - UnsafePointer[c_double, ImmutExternalOrigin](), - ) - if not ost.sws_ctx: - std.os.abort("Failed to initialize conversion context") - - # API wise, this seems problematic no? These are all long longs - # and we are converting to ints. - fill_yuv_image( - ost.tmp_frame, - c_int(ost.next_pts), - c_int(c[].width), - c_int(c[].height), - ) - - # TODO: There has to be a better way to do this. - # We should at least not be doing the allocations in a hot loop. - var src_slice = alloc[UnsafePointer[c_uchar, ImmutExternalOrigin]]( - len(ost.tmp_frame[].data) - ) - for i in range(len(ost.tmp_frame[].data)): - src_slice[i] = ost.tmp_frame[].data[i].as_immutable() - - var dst = alloc[UnsafePointer[c_uchar, MutExternalOrigin]]( - len(ost.frame[].data) - ) - for i in range(len(ost.frame[].data)): - dst[i] = ost.frame[].data[i] - - # NOTE: https://github.com/modular/modular/pull/5715 - # adds unsafe_ptr to StaticTuple, which is needed for this. - var res = swscale.sws_scale( - ost.sws_ctx, - src_slice, - ost.tmp_frame[].linesize.unsafe_ptr(), - 0, - c[].height, - dst, - ost.frame[].linesize.unsafe_ptr(), - ) - if res < 0: - std.os.abort("Failed to scale image") - else: - fill_yuv_image( - ost.frame, c_int(ost.next_pts), c_int(c[].width), c_int(c[].height) - ) - - # NOTE They use ++ which I think increments the next ptr itself actually, but - # assignes the previous value to pts. - ost.frame[].pts = ost.next_pts - ost.next_pts += 1 - - return ost.frame - - -def write_frame( - fmt_ctx: UnsafePointer[AVFormatContext, MutExternalOrigin], - c: UnsafePointer[AVCodecContext, MutExternalOrigin], - st: UnsafePointer[AVStream, MutExternalOrigin], - frame: UnsafePointer[AVFrame, MutExternalOrigin], - pkt: UnsafePointer[AVPacket, MutExternalOrigin], -) raises -> c_int: - # TODO: Check pkt. It looks completely invalid. - var ret = c_int(0) - ret = avcodec.avcodec_send_frame(c, frame) - if ret < 0: - std.os.abort("Failed to send frame to encoder") - _ = frame - while ret >= 0: - ret = avcodec.avcodec_receive_packet(c, pkt) - - if ret == AVERROR(ErrNo.EAGAIN.value) or ret == Int32(AVERROR_EOF): - break - elif ret < 0: - print(avutil.av_err2str(ret)) - std.os.abort( - "Failed to receive packet from encoder with ret val: {}".format( - ret - ) - ) - - avcodec.av_packet_rescale_ts(pkt, c[].time_base, st[].time_base) - pkt[].stream_index = st[].index - - log_packet(fmt_ctx, pkt) - ret = avformat.av_interleaved_write_frame(fmt_ctx, pkt) - if ret < 0: - std.os.abort("Failed to write output packet") - - # _ = avcodec - # _ = avformat - return c_int(ret == Int32(AVERROR_EOF)) - - -def write_video_frame( - oc: UnsafePointer[AVFormatContext, MutExternalOrigin], - mut ost: OutputStream, -) raises -> c_int: - var ret = write_frame( - fmt_ctx=oc, - c=ost.enc, - st=ost.st, - frame=get_video_frame(ost), - pkt=ost.tmp_pkt, - ) - return ret - - -def test_av_mux_example() raises: - """From: https://www.ffmpeg.org/doxygen/8.0/mux_8c-example.html.""" - var video_st = OutputStream() - # NOTE: Not interested in audio at the moment. - # var audio_st = OutputStream() - var fmt = alloc[UnsafePointer[AVOutputFormat, ImmutExternalOrigin]](1) - var oc = alloc[UnsafePointer[AVFormatContext, MutExternalOrigin]](1) - # NOTE: Not interested in audio at the moment. - # var audio_codec = AVCodec() - var video_codec = alloc[UnsafePointer[AVCodec, ImmutExternalOrigin]](1) - var ret = c_int(0) - var have_video = c_int(0) - # NOTE: Not interested in audio at the moment. - # var have_audio = c_int(0) - var encode_video = c_int(0) - # var encode_audio = c_int(0) - var opt = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt[] = UnsafePointer[ - AVDictionary, MutExternalOrigin - ]() # NULL, let FFmpeg manage - var opt2 = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - opt2[] = UnsafePointer[ - AVDictionary, MutExternalOrigin - ]() # NULL, let FFmpeg manage - var i = c_int(0) - - var test_data_root = std.os.getenv("PIXI_PROJECT_ROOT") - var input_filename: String = ( - "{}/test_data/testsrc_320x180_30fps_2s.h264".format(test_data_root) - ) - var output_filename: String = ( - "{}/test_data/dash_manual/testsrc_320x180_30fps_2s.mp4".format( - test_data_root - ) - ) - - var parent_path_parts = Path(output_filename).parts()[:-1] - var parent_path = Path(String(std.os.sep).join(parent_path_parts)) - std.os.makedirs(parent_path, exist_ok=True) - # FIXME: Tryout without any flags, just h264 to mp4. - # ret = avformat.alloc_output_context(oc, output_filename) - - ret = avformat.alloc_output_context( - ctx=oc, - filename=output_filename, - ) - if not oc or ret < 0: - std.os.abort("Failed to allocate output context") - # Note: The example: mux.c will switch to 'mpeg' on failure. In our case - # however, we want to be strict about the expected behavior. - - fmt[] = oc[][].oformat - video_codec[] = oc[][].video_codec - - if fmt[][].video_codec != AVCodecID.AV_CODEC_ID_NONE._value: - print("video codec is not none: ", fmt[][].video_codec) - add_stream(video_st, oc[], video_codec, fmt[][].video_codec) - have_video = 1 - encode_video = 1 - else: - print("video codec is none") - if fmt[][].audio_codec != AVCodecID.AV_CODEC_ID_NONE._value: - print("audio codec is not none") - else: - print("audio codec is none") - - if have_video: - open_video(oc[], video_codec[], video_st, opt[]) - - # Not interested in audio at the moment. - # if have_audio: - # open_audio(avformat, avcodec, oc[], audio_codec[], audio_st, opt[]) - - avformat.av_dump_format( - oc[], - 0, - output_filename, - 1, - ) - - if not (fmt[][].flags & AVFMT_NOFILE): - ret = avformat.avio_open( - UnsafePointer(to=oc[][].pb), - output_filename, - AVIO_FLAG_WRITE, - ) - if ret < 0: - std.os.abort("Failed to open output file: {}".format(ret)) - # TODO: Not sure if mojo can access stderror or not? - # Would be ideal since that would surface the error message to the user. - # fprintf(stderr, "Could not open '%s': %s\n", filename, - # av_err2str(ret)); - - print("writing header") - ret = avformat.avformat_write_header( - oc[], - opt2, - ) - print("dune writing") - if ret < 0: - std.os.abort("Failed to write header: {}".format(ret)) - # TODO: Not sure if mojo can access stderror or not? - # Would be ideal since that would surface the error message to the user. - # fprintf(stderr, "Error occurred when opening output file: %s\n", - # av_err2str(ret)); - - while encode_video: - # TODO: This if statement is only needed when using audio. - # if encode_video and avutil.av_compare_ts( - # video_st.next_pts, - # video_st.enc->time_base, - # audio_st.next_pts, - # audio_st.enc->time_base - # ) <= 0: - if encode_video: - var result = write_video_frame(oc[], video_st) - # print("Result: {}".format(result)) - encode_video = c_int(result == 0) - # else: - # encode_audio = !write_audio_frame(oc, &audio_st) - - ret = avformat.av_write_trailer(oc[]) - if ret < 0: - std.os.abort("Failed to write trailer: {}".format(ret)) - - if oc[]: - if not (fmt[][].flags & AVFMT_NOFILE) and oc[][].pb: - var pb_ptr = alloc[UnsafePointer[AVIOContext, MutExternalOrigin]](1) - pb_ptr[] = oc[][].pb - _ = avformat.avio_closep(pb_ptr) - oc[][].pb = pb_ptr[] - pb_ptr.free() - avformat.avformat_free_context(oc[]) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_ffmpeg_h264_to_pgm.mojo b/tests/test_ffmpeg/test_ffmpeg_h264_to_pgm.mojo deleted file mode 100644 index 4978f84..0000000 --- a/tests/test_ffmpeg/test_ffmpeg_h264_to_pgm.mojo +++ /dev/null @@ -1,163 +0,0 @@ -from std.testing import TestSuite, assert_equal -from std.memory import memset -import std.os -import std.sys -from std.ffi import c_uchar, c_int, c_char -from std.sys._libc_errno import ErrNo - -from ash_dynamics.ffmpeg.avcodec.packet import AVPacket -from ash_dynamics.ffmpeg.avutil.avutil import AV_NOPTS_VALUE -from ash_dynamics.ffmpeg.avutil.rational import AVRational -from ash_dynamics.ffmpeg.avutil.buffer import AVBufferRef -from ash_dynamics.ffmpeg.avutil.buffer_internal import AVBuffer -from ash_dynamics.ffmpeg.avutil.dict import AVDictionary -from ash_dynamics.ffmpeg.avcodec.avcodec import AVCodecContext -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avcodec.packet import ( - AVPacketSideData, - AVPacketSideDataType, -) -from ash_dynamics.ffmpeg.avcodec.defs import AV_INPUT_BUFFER_PADDING_SIZE -from ash_dynamics.ffmpeg.avcodec.codec_id import AVCodecID -from ash_dynamics.ffmpeg import avcodec -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.error import AVERROR, AVERROR_EOF - - -def pgm_save( - buf: UnsafePointer[c_uchar, origin=MutExternalOrigin], - wrap: c_int, - xsize: c_int, - ysize: c_int, - filename: String, -) raises: - with open(filename, "w") as f: - f.write("P5\n{} {}\n255\n".format(xsize, ysize)) - for i in range(ysize): - # Write one row of pixel data - var row_ptr = buf + Int(i * wrap) - f.write_bytes(Span(ptr=row_ptr, length=Int(xsize))) - - -fn decode( - dec_ctx: UnsafePointer[AVCodecContext, origin=MutExternalOrigin], - frame: UnsafePointer[AVFrame, origin=MutExternalOrigin], - pkt: UnsafePointer[AVPacket, origin=MutExternalOrigin], - filename: String, -) raises: - var ret = avcodec.avcodec_send_packet(dec_ctx, pkt) - - while ret >= 0: - ret = avcodec.avcodec_receive_frame(dec_ctx, frame) - if ret == AVERROR(ErrNo.EAGAIN.value) or ret == Int32(AVERROR_EOF): - break - elif ret < 0: - std.os.abort("Error receiving frame.") - else: - print("Frame received successfully.") - - try: - print("Saving frame {}".format(dec_ctx[].frame_num)) - # TODO: Nto quite sure why teh example.cpp prints sizeof(buf) when the - # size is 1024. Unless pgm_save changes the buf size? - out_filename = "{}-{}.pgm".format(filename, dec_ctx[].frame_num) - pgm_save( - frame[].data[0], - frame[].linesize[0], - frame[].width, - frame[].height, - out_filename, - ) - - except e: - print("Error saving frame: ", e) - - -def test_av_decode_video_example() raises: - """From: https://www.ffmpeg.org/doxygen/8.0/decode_video_8c-example.html.""" - comptime INBUF_SIZE = c_int(4096) - - var input_buffer = alloc[c_uchar]( - Int(INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE) - ) - - # Set the padding portion of the input_buffer to zero. - memset( - input_buffer + INBUF_SIZE, - 0, - Int(AV_INPUT_BUFFER_PADDING_SIZE), - ) - var packet = avcodec.av_packet_alloc() - print(packet[]) - - var codec = avcodec.avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264._value) - print(codec[]) - - var parser = avcodec.av_parser_init(codec[].id) - print(parser[]) - - var context = avcodec.avcodec_alloc_context3(codec) - print(context[]) - - ptr = UnsafePointer[AVDictionary, MutExternalOrigin]() - ptr_ptr = alloc[UnsafePointer[AVDictionary, MutExternalOrigin]](1) - ptr_ptr[] = ptr - _ = avcodec.avcodec_open2(context, codec, ptr_ptr) - print("Opened codec") - - var test_data_root = std.os.getenv("PIXI_PROJECT_ROOT") - var out_filename: String = ( - "{}/test_data/testsrc_320x180_30fps_2s_decoded".format(test_data_root) - ) - - var frame = avutil.av_frame_alloc() - - with open( - "{}/test_data/testsrc_320x180_30fps_2s.h264".format(test_data_root), "r" - ) as f: - while True: - var data_size = c_int( - f.read[c_uchar.dtype]( - Span(ptr=input_buffer, length=Int(INBUF_SIZE)) - ) - ) - - if data_size == 0: - break - - var data = input_buffer - while data_size > 0: - var ret = avcodec.av_parser_parse2( - parser, - context, - UnsafePointer(to=packet[].data), - UnsafePointer(to=packet[].size), - data, - data_size, - AV_NOPTS_VALUE, - AV_NOPTS_VALUE, - 0, - ) - if ret < 0: - print("Failed to parse data") - std.sys.exit(1) - elif parser[].flags & AVPacket.AV_PKT_FLAG_CORRUPT: - print("Parsed data is corrupted") - else: - print("Parsed data is valid") - data += ret - data_size -= ret - - if packet[].size > 0: - print("Packet size: ", packet[].size) - decode(context, frame, packet, out_filename) - - avutil.av_frame_free(frame) - avcodec.av_packet_free(packet) - - avcodec.avcodec_free_context(context) - avcodec.av_parser_close(parser) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_ffmpeg/test_swrsample/test_swrsample.mojo b/tests/test_ffmpeg/test_swrsample/test_swrsample.mojo deleted file mode 100644 index 2feae33..0000000 --- a/tests/test_ffmpeg/test_swrsample/test_swrsample.mojo +++ /dev/null @@ -1,327 +0,0 @@ -from std.testing import TestSuite, assert_true, assert_equal -from std.memory import alloc, memset -from std.ffi import c_int, c_uchar, c_long_long, c_double -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.channel_layout import ( - AVChannelLayout, - AV_CH_LAYOUT_STEREO, - AVMatrixEncoding, -) -from ash_dynamics.ffmpeg.avutil.samplefmt import AVSampleFormat -from ash_dynamics.ffmpeg.swrsample import swrsample - - -def test_swr_get_class() raises: - var cls = swrsample.swr_get_class() - assert_true(Bool(cls)) - - -def test_swr_alloc() raises: - var ctx = swrsample.swr_alloc() - assert_true(Bool(ctx)) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - ctx_ptr[0] = ctx - swrsample.swr_free(ctx_ptr) - - -def test_swr_alloc_and_init() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - assert_equal(ret, 0) - assert_true(Bool(ctx_ptr[0])) - var init_ret = swrsample.swr_init(ctx_ptr[0]) - assert_equal(init_ret, 0) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_is_initialized() raises: - var ctx = swrsample.swr_alloc() - assert_equal( - swrsample.swr_is_initialized(ctx.as_immutable()), - 0, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - ctx_ptr[0] = ctx - swrsample.swr_free(ctx_ptr) - - -def test_swr_close() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - _ = swrsample.swr_init(ctx_ptr[0]) - swrsample.swr_close(ctx_ptr[0]) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_convert() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - assert_equal(ret, 0) - var init_ret = swrsample.swr_init(ctx_ptr[0]) - assert_equal(init_ret, 0) - var in_buf = alloc[c_uchar](1024) - var out_buf = alloc[c_uchar](1024) - var in_ptrs = alloc[UnsafePointer[c_uchar, ImmutExternalOrigin]](1) - var out_ptrs = alloc[UnsafePointer[c_uchar, MutExternalOrigin]](1) - in_ptrs[0] = in_buf.as_immutable() - out_ptrs[0] = out_buf - var n = swrsample.swr_convert( - ctx_ptr[0], - out_ptrs.as_immutable(), - 256, - in_ptrs.as_immutable(), - 256, - ) - assert_true(n >= 0) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_next_pts() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - assert_equal(ret, 0) - var init_ret = swrsample.swr_init(ctx_ptr[0]) - assert_equal(init_ret, 0) - var pts = swrsample.swr_next_pts(ctx_ptr[0], 0) - assert_true(pts >= -1) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_set_compensation() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - assert_equal(ret, 0) - var init_ret = swrsample.swr_init(ctx_ptr[0]) - assert_equal(init_ret, 0) - var ret1 = swrsample.swr_set_compensation(ctx_ptr[0], 0, 0) - assert_equal(ret1, 0) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_set_channel_mapping() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var ctx_ptr = alloc[UnsafePointer[swrsample.SwrContext, MutExternalOrigin]]( - 1 - ) - memset(ctx_ptr, 0, 1) - var ret = swrsample.swr_alloc_set_opts2( - ctx_ptr, - out_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 48000, - in_layout.as_immutable(), - AVSampleFormat.AV_SAMPLE_FMT_S16._value, - 44100, - 0, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - # Must be called before swr_init: context allocated but not yet initialized. - var map = alloc[c_int](2) - map[0] = 0 - map[1] = 1 - var ret1 = swrsample.swr_set_channel_mapping( - ctx_ptr[0], - map.as_immutable(), - ) - assert_equal(ret1, 0) - var init_ret = swrsample.swr_init(ctx_ptr[0]) - assert_equal(init_ret, 0) - swrsample.swr_free(ctx_ptr) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def test_swr_build_matrix2() raises: - var out_layout = alloc[AVChannelLayout](1) - var in_layout = alloc[AVChannelLayout](1) - memset(out_layout, 0, 1) - memset(in_layout, 0, 1) - _ = avutil.av_channel_layout_from_mask( - out_layout, - AV_CH_LAYOUT_STEREO, - ) - _ = avutil.av_channel_layout_from_mask( - in_layout, - AV_CH_LAYOUT_STEREO, - ) - var matrix = alloc[c_double](4) - var ret1 = swrsample.swr_build_matrix2( - in_layout.as_immutable(), - out_layout.as_immutable(), - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - matrix, - 2, - AVMatrixEncoding.AV_MATRIX_ENCODING_NONE._value, - OpaquePointer[MutExternalOrigin](unsafe_from_address=0), - ) - assert_equal(ret1, 0) - avutil.av_channel_layout_uninit(out_layout) - avutil.av_channel_layout_uninit(in_layout) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() - # test_swr_get_class() - # test_swr_alloc() - # test_swr_alloc_and_init() - # test_swr_is_initialized() - # test_swr_close() - # test_swr_convert() - # test_swr_next_pts() - # test_swr_set_compensation() - # test_swr_set_channel_mapping() - # test_swr_build_matrix2() diff --git a/tests/test_ffmpeg/test_swscale/test_swscale.mojo b/tests/test_ffmpeg/test_swscale/test_swscale.mojo deleted file mode 100644 index 4615b30..0000000 --- a/tests/test_ffmpeg/test_swscale/test_swscale.mojo +++ /dev/null @@ -1,325 +0,0 @@ -from std.testing import TestSuite, assert_true, assert_equal -from std.memory import alloc, memset -from std.ffi import c_double, c_int, c_uchar -from ash_dynamics.ffmpeg.swscale.swscale import SwsFilter -from ash_dynamics.ffmpeg.swscale import swscale as sws -from ash_dynamics.ffmpeg import avutil -from ash_dynamics.ffmpeg.avutil.frame import AVFrame -from ash_dynamics.ffmpeg.avutil.pixfmt import ( - AVPixelFormat, - AVColorSpace, - AVColorPrimaries, - AVColorTransferCharacteristic, -) - - -def test_swscale_version() raises: - var v = sws.swscale_version() - assert_true(v > 0) - - -def test_swscale_configuration() raises: - var cfg = sws.swscale_configuration() - assert_true(Bool(cfg)) - - -def test_swscale_license() raises: - var lic = sws.swscale_license() - assert_true(Bool(lic)) - - -def test_sws_get_class() raises: - var cls = sws.sws_get_class() - assert_true(Bool(cls)) - - -def test_sws_test_format() raises: - var ret = sws.sws_test_format(AVPixelFormat.AV_PIX_FMT_YUV420P._value, 0) - assert_true(ret >= 0) - - -def test_sws_test_colorspace() raises: - var ret = sws.sws_test_colorspace(AVColorSpace.AVCOL_SPC_BT709._value, 0) - assert_true(ret >= 0) - - -def test_sws_test_primaries() raises: - var ret = sws.sws_test_primaries(AVColorPrimaries.AVCOL_PRI_BT709._value, 0) - assert_true(ret >= 0) - - -def test_sws_test_transfer() raises: - var ret = sws.sws_test_transfer( - AVColorTransferCharacteristic.AVCOL_TRC_BT709._value, 0 - ) - assert_true(ret >= 0) - - -def test_sws_isSupportedInput() raises: - var ret = sws.sws_isSupportedInput(AVPixelFormat.AV_PIX_FMT_YUV420P._value) - assert_true(ret >= 0) - - -def test_sws_isSupportedOutput() raises: - var ret = sws.sws_isSupportedOutput(AVPixelFormat.AV_PIX_FMT_YUV420P._value) - assert_true(ret >= 0) - - -def test_sws_isSupportedEndiannessConversion() raises: - var ret = sws.sws_isSupportedEndiannessConversion( - AVPixelFormat.AV_PIX_FMT_YUV420P._value - ) - assert_true(ret >= 0) - - -def test_sws_getCoefficients() raises: - var coeffs = sws.sws_getCoefficients(5) - assert_true(Bool(coeffs)) - - -def test_sws_getContext_and_free() raises: - var ctx = sws.sws_getContext( - 640, - 480, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 320, - 240, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 0, - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[c_double, ImmutExternalOrigin](unsafe_from_address=0), - ) - assert_true(Bool(ctx)) - sws.sws_freeContext(ctx) - - -def test_sws_getDefaultFilter_and_free() raises: - var f = sws.sws_getDefaultFilter(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0) - assert_true(Bool(f)) - sws.sws_freeFilter(f) - - -def test_sws_allocVec_and_free() raises: - var v = sws.sws_allocVec(16) - assert_true(Bool(v)) - sws.sws_freeVec(v) - - -def test_sws_getGaussianVec() raises: - var v = sws.sws_getGaussianVec(1.0, 1.0) - assert_true(Bool(v)) - sws.sws_freeVec(v) - - -def test_sws_scaleVec() raises: - var v = sws.sws_allocVec(8) - assert_true(Bool(v)) - sws.sws_scaleVec(v, 2.0) - sws.sws_freeVec(v) - - -def test_sws_normalizeVec() raises: - var v = sws.sws_allocVec(8) - assert_true(Bool(v)) - sws.sws_normalizeVec(v, 1.0) - sws.sws_freeVec(v) - - -def test_sws_test_frame() raises: - var frame = avutil.av_frame_alloc() - frame[].width = 640 - frame[].height = 480 - frame[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret = avutil.av_frame_get_buffer(frame, 0) - assert_equal(ret, 0) - var test_ret = sws.sws_test_frame(frame.as_immutable(), 0) - assert_true(test_ret >= 0) - avutil.av_frame_free(frame) - - -def test_sws_scale_frame() raises: - var src = avutil.av_frame_alloc() - src[].width = 640 - src[].height = 480 - src[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret1 = avutil.av_frame_get_buffer(src, 0) - assert_equal(ret1, 0) - memset(src[].data[0], 0, Int(src[].linesize[0]) * Int(src[].height)) - memset(src[].data[1], 0, Int(src[].linesize[1]) * (Int(src[].height) // 2)) - memset(src[].data[2], 0, Int(src[].linesize[2]) * (Int(src[].height) // 2)) - var dst = avutil.av_frame_alloc() - dst[].width = 320 - dst[].height = 240 - dst[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret2 = avutil.av_frame_get_buffer(dst, 0) - assert_equal(ret2, 0) - var ctx = sws.sws_getContext( - 640, - 480, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 320, - 240, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 0, - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[c_double, ImmutExternalOrigin](unsafe_from_address=0), - ) - assert_true(Bool(ctx)) - var scale_ret = sws.sws_scale_frame( - ctx, - dst, - src.as_immutable(), - ) - assert_equal(scale_ret, 240) - sws.sws_freeContext(ctx) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_sws_scale() raises: - var src_frame = avutil.av_frame_alloc() - src_frame[].width = 64 - src_frame[].height = 48 - src_frame[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret1 = avutil.av_frame_get_buffer(src_frame, 0) - assert_equal(ret1, 0) - memset( - src_frame[].data[0], - 0, - Int(src_frame[].linesize[0]) * Int(src_frame[].height), - ) - memset( - src_frame[].data[1], - 0, - Int(src_frame[].linesize[1]) * (Int(src_frame[].height) // 2), - ) - memset( - src_frame[].data[2], - 0, - Int(src_frame[].linesize[2]) * (Int(src_frame[].height) // 2), - ) - var dst_frame = avutil.av_frame_alloc() - dst_frame[].width = 32 - dst_frame[].height = 24 - dst_frame[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - var ret2 = avutil.av_frame_get_buffer(dst_frame, 0) - assert_equal(ret2, 0) - var ctx = sws.sws_getContext( - 64, - 48, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 32, - 24, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 0, - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[c_double, ImmutExternalOrigin](unsafe_from_address=0), - ) - assert_true(Bool(ctx)) - var src_slice = alloc[UnsafePointer[c_uchar, ImmutExternalOrigin]](8) - for i in range(8): - src_slice[i] = src_frame[].data[i].as_immutable() - var dst_slice = alloc[UnsafePointer[c_uchar, MutExternalOrigin]](8) - for i in range(8): - dst_slice[i] = dst_frame[].data[i] - var scale_ret = sws.sws_scale( - ctx, - src_slice.as_immutable(), - src_frame[].linesize.unsafe_ptr().as_immutable(), - 0, - 48, - dst_slice, - dst_frame[].linesize.unsafe_ptr().as_immutable(), - ) - assert_equal(scale_ret, 24) - sws.sws_freeContext(ctx) - src_slice.free() - dst_slice.free() - avutil.av_frame_free(src_frame) - avutil.av_frame_free(dst_frame) - - -def test_sws_is_noop() raises: - var src = avutil.av_frame_alloc() - src[].width = 64 - src[].height = 48 - src[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - _ = avutil.av_frame_get_buffer(src, 0) - var dst = avutil.av_frame_alloc() - dst[].width = 64 - dst[].height = 48 - dst[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - _ = avutil.av_frame_get_buffer(dst, 0) - var noop = sws.sws_is_noop( - dst.as_immutable(), - src.as_immutable(), - ) - assert_equal(noop, 1) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def test_sws_frame_setup() raises: - var ctx = sws.sws_getContext( - 64, - 48, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 32, - 24, - AVPixelFormat.AV_PIX_FMT_YUV420P._value, - 0, - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[SwsFilter, MutExternalOrigin](unsafe_from_address=0), - UnsafePointer[c_double, ImmutExternalOrigin](unsafe_from_address=0), - ) - assert_true(Bool(ctx)) - var src = avutil.av_frame_alloc() - src[].width = 64 - src[].height = 48 - src[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - _ = avutil.av_frame_get_buffer(src, 0) - var dst = avutil.av_frame_alloc() - dst[].width = 32 - dst[].height = 24 - dst[].format = AVPixelFormat.AV_PIX_FMT_YUV420P._value - _ = avutil.av_frame_get_buffer(dst, 0) - var ret = sws.sws_frame_setup( - ctx, - dst.as_immutable(), - src.as_immutable(), - ) - assert_equal(ret, 0) - sws.sws_freeContext(ctx) - avutil.av_frame_free(src) - avutil.av_frame_free(dst) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() - # test_swscale_version() - # test_swscale_configuration() - # test_swscale_license() - # test_s - # test_sws_get_class() - # test_sws_test_format() - # test_sws_test_colorspace() - # test_sws_test_primaries() - # test_sws_test_transfer() - # test_sws_isSupportedInput() - # test_sws_isSupportedOutput() - # test_sws_isSupportedEndiannessConversion() - # test_sws_getCoefficients() - # test_sws_getContext_and_free() - # test_sws_getDefaultFilter_and_free() - # test_sws_allocVec_and_free() - # test_sws_getGaussianVec() - # test_sws_scaleVec() - # test_sws_normalizeVec() - # test_sws_test_frame() - # test_sws_scale_frame() - # test_sws_scale() - # test_sws_is_noop() - # test_sws_frame_setup() diff --git a/tests/test_image/test_io.mojo b/tests/test_image/test_io.mojo index f946cab..ffef838 100644 --- a/tests/test_image/test_io.mojo +++ b/tests/test_image/test_io.mojo @@ -2,7 +2,7 @@ from std.testing import TestSuite, assert_equal from std.os import getenv from std.os.path import join from ash_dynamics.image.io import image_read, image_save -from ash_dynamics.ffmpeg.avutil.pixfmt import AVPixelFormat +from mav.ffmpeg.avutil.pixfmt import AVPixelFormat def test_image_read() raises: diff --git a/tests/test_primitives/test_clib.mojo b/tests/test_primitives/test_clib.mojo deleted file mode 100644 index 27a65b5..0000000 --- a/tests/test_primitives/test_clib.mojo +++ /dev/null @@ -1,128 +0,0 @@ -from std.testing import TestSuite, assert_equal -from ash_dynamics.primitives._clib import C_Union, TrivialOptionalField -from std.sys import size_of - - -def test_c_union() raises: - # Test a single type union's size against its MLIR type - comptime UInt8Union = C_Union[UInt8] - var single_type_union_instance: UInt8Union = UInt8(4) - assert_equal(size_of[UInt8Union](), size_of[UInt8]()) - _ = single_type_union_instance - - # Test 3 int type unions size against the largest one - comptime ThreeIntUnion = C_Union[Int8, Int16, Int32] - var int_type_union_instance: ThreeIntUnion = Int32(4) - assert_equal(size_of[ThreeIntUnion](), size_of[Int32]()) - _ = int_type_union_instance - - # Test against the variant mlir size - comptime VariantUnion = C_Union[UInt8, UInt16] - comptime UInt8AndUInt16Variant = __mlir_type[ - `!kgen.variant<`, `ui8`, `,`, `ui16`, `>` - ] - var variant_union_instance: VariantUnion = UInt16(4) - # NOTE: variant has an additional 2 bytes for the discriminant - assert_equal(size_of[VariantUnion](), size_of[UInt8AndUInt16Variant]() - 2) - _ = variant_union_instance - - # Test against the union mlir size - comptime Int8And16Union = C_Union[UInt8, UInt16] - comptime UInt32MLIRUnion = __mlir_type[`!pop.union<`, `ui16`, `>`] - var union_union_instance: Int8And16Union = UInt16(4) - # NOTE: MLIR union is bugged. It takes 8 bytes regardless of - # what is contained in it. - assert_equal(size_of[Int8And16Union](), size_of[UInt32MLIRUnion]()) - _ = union_union_instance - - -def test_mlir_unions() raises: - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui8`, `>`]](), 1) - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui16`, `>`]](), 2) - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui32`, `>`]](), 4) - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui64`, `>`]](), 8) - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui128`, `>`]](), 16) - assert_equal(size_of[__mlir_type[`!pop.union<`, `ui256`, `>`]](), 32) - assert_equal(size_of[__mlir_type[`!pop.union<`, `si8`, `>`]](), 1) - assert_equal(size_of[__mlir_type[`!pop.union<`, `si16`, `>`]](), 2) - assert_equal(size_of[__mlir_type[`!pop.union<`, `si32`, `>`]](), 4) - # Test multiple type unions - assert_equal( - size_of[__mlir_type[`!pop.union<`, `ui8`, `,`, `ui16`, `>`]](), 2 - ) - assert_equal( - size_of[ - __mlir_type[`!pop.union<`, `ui8`, `,`, `ui16`, `,`, `ui32`, `>`] - ](), - 4, - ) - assert_equal( - size_of[ - __mlir_type[ - `!pop.union<`, `ui8`, `,`, `ui16`, `,`, `ui32`, `,`, `ui64`, `>` - ] - ](), - 8, - ) - assert_equal( - size_of[ - __mlir_type[ - `!pop.union<`, - `ui8`, - `,`, - `ui16`, - `,`, - `ui32`, - `,`, - `ui64`, - `,`, - `ui128`, - `>`, - ] - ](), - 16, - ) - assert_equal( - size_of[ - __mlir_type[ - `!pop.union<`, - `ui8`, - `,`, - `ui16`, - `,`, - `ui32`, - `,`, - `ui64`, - `,`, - `ui128`, - `,`, - `ui256`, - `>`, - ] - ](), - 32, - ) - - -@fieldwise_init -struct ContainsActiveField: - var active_field: TrivialOptionalField[True, Int64] - - -@fieldwise_init -struct ContainsInactiveField: - var inactive_field: TrivialOptionalField[False, Int64] - - -def test_trivial_optional_field() raises: - # Test it can be used as a field and value can be accessed when active - var with_active = ContainsActiveField(TrivialOptionalField[True, Int64](42)) - assert_equal(with_active.active_field[], 42) - - # Test inactive field struct has smaller size than active field struct - assert_equal(size_of[ContainsActiveField](), size_of[Int64]()) - assert_equal(size_of[ContainsInactiveField](), 0) - - -def main() raises: - TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/test_primitives/test_image.mojo b/tests/test_primitives/test_image.mojo index 339441a..e306e93 100644 --- a/tests/test_primitives/test_image.mojo +++ b/tests/test_primitives/test_image.mojo @@ -1,5 +1,4 @@ from std.testing import TestSuite, assert_equal -from ash_dynamics.primitives._clib import C_Union, TrivialOptionalField from std.sys import size_of from std.ffi import c_uchar from ash_dynamics.primitives.image import Image